【问题标题】:Dependent attributes in Backbone.js modelBackbone.js 模型中的依赖属性
【发布时间】:2011-10-21 12:18:58
【问题描述】:

如果我的模型中的两个值(a 或 b)中的任何一个发生了变化,则两个监听视图需要计算第三个值 c。

//Pseudo 
mainModel 
  a : 2000 
  b : 3000

view1 
helper.calculateC(this.model.get(a), this.model.get(b)) 

view2 
helper.calculateC(this.model.get(a), this.model.get(b)) 

我宁愿将依赖属性 c 放在模型中(作为 计算相当复杂,“c”以后可能会被允许 被用户覆盖。)什么是好的做法?我应该延长 模型,制作子模型还是什么?

谢谢!

【问题讨论】:

    标签: javascript model-view-controller backbone.js


    【解决方案1】:

    您可以将model 上的绑定添加到初始化调用时它自己的更改事件。

    initialize: function() {
      this.bind("change", this.calculateC);
    },
    
    calculateC: function() {
      this.c = //fill in the blanks
    }    
    

    更具体地说,您只能绑定您需要的属性。

      this.bind("change:a", this.calculateC);
      this.bind("change:b", this.calculateC);
    

    【讨论】:

    • 但是在模型更改事件之前不会计算C?因此,视图将无法访问 c 的最新值。或者你的意思是模型可以在以某种方式触发更改事件之前计算这个?谢谢。
    • 以上似乎工作:) 但我不明白模型是如何在视图之前通知的? (并且:如果我想将“c”设置为模型的属性并为其触发更改事件,我该怎么办?)谢谢!
    • 您首先获得事件,因为您是第一个将更改事件挂在自己身上的人。 Initialize 在构造函数中被调用,所以你知道你是第一个挂钩它的人......
    • 谢谢!后续行动:1)如果a和b都改变了,防止c被计算两次的好方法是什么? 2)如果 c 是模型属性,我可以让它与 a & b 一起触发更改事件吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    相关资源
    最近更新 更多