Backbone.js - 将2个模型传递给1个视图

时间:2011-10-12 02:17:05

标签: backbone.js

我正在尝试将2个模型传递给视图,但它似乎无法正常工作。以下是我的示例:http://jsfiddle.net/kahhor/jp4B6/14/正如您所看到的,第二个警报显示未定义...

可能是我有错误的做法。我要做的是:在View1绑定事件'change'Model1 ... ...通过点击View2中的按钮,调用Model1中的函数它会更改值,并自动呈现View1,因为它被绑定以更改事件。

但请不要忘记,View2也有自己的Model2,我在视图之外创建了new View2({model:Model2});,而不是像{{1}}那样传递它。

起初可能看起来很混乱,但我认为骨干可以做到这一点很简单。我只是不知道该怎么做:)

谢谢,

3 个答案:

答案 0 :(得分:23)

您可以从

访问自定义参数(选项)
window.PopupView = new PopupView({ model: LeftNotificationM, model2: PopupM});
像这样:

window.PopupView = Backbone.View.extend({

    // code left out

    initialize: function () {
        this.model.bind('change:notification_num', this.render);
        alert(this.model);
        // your model2 option:
        alert(this.options.model2);
    },

   // code left out
});

结论:可以在this.options

中找到视图的“无法识别的选项”

答案 1 :(得分:5)

我刚刚通过Google发现了这个问题和Sled的答案,这对我帮助很大 - 但只是为了更新这个2岁的问题并且可能会让其他一些Google员工感到头疼:

  

Backbone Views不再自动附加传递给的选项   构造函数为this.options,但如果您愿意,可以自己动手。

Vitaliy's Answer on a similar question向您展示:

initialize : function (options) {
  this.options = options || {};
}

答案 2 :(得分:2)

添加此修补程序并直接将任何选项传递给查看。

    Backbone.View.prototype._configureWithoutThis = Backbone.View.prototype._configure;
    Backbone.View.prototype._configure = function(options) {
      this._configureWithoutThis(options);
      _.extend(this, this.options);
    }