【问题标题】:Can 2 independent models be updated in one view in backbone.js可以在一个视图中更新 2 个独立的模型骨干.js
【发布时间】:2016-03-14 17:56:51
【问题描述】:

我有 2 个单独的模型,我需要在其中一个视图中更改这些模型。

这可以使用backbone.js来完成吗

如果可以,谁能给我一个简短的示例

谢谢

【问题讨论】:

  • 为什么你认为不可能..?你尝试了什么..? “我需要在一个视图中更改这些模型” .. 到底是什么意思?请不要将 stackoverflow 视为您来索取代码的地方,人们会为您工作。

标签: backbone.js backbone-views


【解决方案1】:
var app = app||{};

app.Model1 = Backbone.Model.extend({
   //some code
});
app.Model2 = Backbone.Model.extend({
   //some code
});
var model1 = app.Model1();
var model2 = app.Model2();

app.View = Backbone.View.extend({
   initialize : function(options){
   console.log(options.model1);
   console.log(options.model2);
   }
});

var view = new app.View({model1 : model1, model2 : model2});

因此,您可以绑定多个模型,并定义适当的函数来单独更新模型。

另一种非常酷的方法是使用此处介绍的动态模型:Backbone.js: complex views combining multiple models

【讨论】:

    【解决方案2】:

    一种方法是将这些模型的collection 绑定到视图:

    var collection = new Backbone.Collection();
    collection.add(model1);
    collection.add(model2);
    

    当你创建视图时,你应该用这个集合来初始化它:

    var myView = new View({collection:collection});

    然后,在视图中,您可以通过以下方式更改每个视图:

      events :{ 'input input' : 'updateModels'},
      updateModels: function(e){
        for(var i=0;i<this.collection.length;i++)
        {
            this.collection.at(i).set({'someProperty':'someValue'});
        }
      }
    

    上面的例子会在用户输入时触发。

    另一种方法是在您的集合中设置一个自定义属性来保存这些模型的数组,然后执行相同的操作,但我认为使用集合可以为您完成工作。

    你可以在这里看到一个非常简单和虚拟的例子:http://jsfiddle.net/nwo5bww1/

    【讨论】:

    • 关于这个解决方案需要注意的一点是,它只有在两个模型是同一个模型类的实例时才有效(或者我相信)。但是问题的标题是“两个独立的模型”,这让我认为它们可能是不同类别的模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2018-09-06
    相关资源
    最近更新 更多