【问题标题】:how to change all backbone models attribute如何更改所有主干模型属性
【发布时间】:2014-10-08 21:08:27
【问题描述】:

我是 Backbone 的新手,请帮我解决这个问题。

我的模型如下所示:

var optionItem = Backbone.Model.extend({});
var itemOne = new optionItem({price: 200});
var itemTwo = new optionItem({price: 300});
var itemThree = new optionItem({price: 400});

我的收藏看起来像这样:

var optionClass = Backbone.Collection.extend({});  
var firstOptionClass = new optionClass([itemOne, itemTwo, itemThree]);

要求是创建 3 个单选按钮,并显示所有 3 个项目的价格。当用户单击任何单选按钮时,所选项目的价格将更改为“包含在价格中”,其他 2 个项目将显示价格差异。例如,如果我点击 itemOne,itemTwo 的价格将是“+100”而不是显示 300。

我知道如何为模型和集合创建视图以显示原始信息,但不知道如何编写点击事件函数...目前我在模型视图中有事件函数,但无法访问另一个 2模型价格属性来执行数学运算,我应该将事件函数移动到集合视图吗?

请帮忙,提前谢谢!!!!

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    点击偶数功能应该在Backbone.View中

    而且您需要访问多个模型才能获得价格。你的事件函数也应该在 Backbone.View 控制器而不是模型类中。

    希望对你有帮助,

    【讨论】:

      【解决方案2】:

      有几种方法可以解决这个问题,但要记住的一点是,每个模型都维护对其所属集合的引用。因此,在您看来,this.model 有一个 this.model.collection 属性,您可以在必要时使用它来访问集合。 That said, I would probably use a collection view to handle the display of collection related information to prevent the item view from violating the single responsibility principle When one of the options is selected, have the selected model trigger an event.模型事件冒泡到集合中,您可以让集合视图在集合上侦听该事件以更新其他选项的“差异”值。

      【讨论】:

      • 我成功了!!我将事件函数放在模型视图中,并使用 this.model.collection.each() 来计算价格。非常感谢您的帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      相关资源
      最近更新 更多