Backbone.js view instance variables?

前端 未结 1 929
终归单人心
终归单人心 2021-02-13 14:24

I\'m learning Backbone.js and am trying to figure out whether it\'s possible to have instance variables in Backbone views.

My goal is to load a view\'s templates from an

1条回答
  •  说谎
    说谎 (楼主)
    2021-02-13 15:08

    Your view_templates instance variable is fine (and a good idea as well). You just have to be sure that you're using the right this inside your $.get() callback and inside your tmpls.each() call. I think you want your initialize to look more like this:

    initialize: function() {
        this.view_templates = { };
    
        var _this = this;
        $.get('js/Test2Templates.tpl', function(doc) {
            var tmpls = $(doc).filter('template');
            tmpls.each(function() {
                _this.view_templates[this.id] = $.jqotec($.unescapeHTML(this.innerHTML));
            });
        });
    },
    

    I'm not sure which this.id you want inside the tmpls.each() but I'm guessing that you want the DOM id attribute from the current template so I left it as this.id.

    The this.view_templates assignment in your constructor (initialize) is needed because you presumably want each instance of the view to have its own copy of the array. Creating a new view instance doesn't do a deep copy of the the view so if you just have:

    MessageView = Backbone.View.extend({
        view_templates: {},
        // ...
    

    then all the instances will end up sharing the same view_templates object and view_templates will behave more like a class variable than an instance variable.

    You can specify your instance variables in the view definition (i.e. the Backbone.View.extend() call) as a form of documentation but you will want to initialize any of them that should behave as an instance variable in your initialize method; read-only or "class variables" like events can be left as part of the view's definition.

    0 讨论(0)
提交回复
热议问题