2013-03-13 98 views
2

骨干模型.get().set()如果您的值是简单属性,那么这些例程都可以。我已经继承了一个应用程序,但其值也是JSON对象。骨干模型,JSON和HTML表格

model.get("key")返回

{start: 
    {top:5, bottom:6}, 
    end:{...} 
} 

等设置任何使用.set()这些值是皮塔饼,因为你必须拔出旧值,让你想要的变化,踢它回。即如果我需要bottom = 7,则不能仅仅执行.set("start.bottom",7)。我需要做的是这样的:

var tempValue = model.get("start"); 
tempValue.bottom = 7; 
model.set("start",tempValue) 

模型有一个属性,属性,在这里你可以model.attributes.start.bottom = 7。现在这大概不会触发任何事件处理程序,因为查看Backbone代码,这在set中完成。

所以两个问题:

  • 如果我不需要改变处理火,有什么不对 与设置属性直接。
  • 有没有办法在设置属性后手动触发 更改处理程序?

的骨干更新日志说 - “的型号更改方法已被删除,因为延迟属性的变化是不再可用”但是我不完全知道为什么会。这听起来很有用。

与此相关:我也试图将HTML表单解析到模型中。我一直在试图使用ModelBinder,但它无法处理嵌套的JSON。例如<input type="text" name="start.top">

编辑: 我刚刚意识到你可以用对象做model.set({})。例如model.set({start :{top:7}});但它是一个有点笨重

回答

2
  1. 如果我不需要改变处理火,有什么不对的设置属性直接。

我认为这可能会回答你的问题: Backbone.js get and set nested object attribute

  • 反正是有属性的设置后,手动点火的变化处理的?
  • set方法(没有无声选项)触发2个事件: “改变” 和 “改变:的attributeName”。

    如果你需要它,你可以手动调用触发它们:

    model.trigger("change change:attributeName")