如果您的值是简单的属性,那么主干模型.get()
和.set()
例程就可以了。我继承了一个应用程序,但是其中的值也是 JSON 对象。
即model.get("key")
返回
{start:
{top:5, bottom:6},
end:{...}
}
等等。使用这些值中的任何一个设置.set()
都是 PITA,因为您必须取出旧值,进行所需的更改,然后再次将其重新输入。即如果我想要bottom
= 7,你不能只做.set("start.bottom",7)
. 我需要做类似的事情:
var tempValue = model.get("start");
tempValue.bottom = 7;
model.set("start",tempValue)
模型有一个 attributes 属性,您可以在其中执行model.attributes.start.bottom = 7
. 现在这大概不会触发任何事件处理程序,因为查看 Backbone 代码,这是在set
.
所以两个问题:
- 如果我不需要更改处理程序来触发,直接设置属性有什么问题吗?
- 无论如何在设置属性后手动触发更改处理程序?
Backbone 更改日志说- “模型#change 方法已被删除,因为延迟的属性更改不再可用” -但我不完全确定为什么会这样。听起来很有用。
与此相关:我也在尝试将 HTML 表单解析到模型中。我一直在尝试使用 ModelBinder,但它无法处理嵌套的 JSON。例如<input type="text" name="start.top">
编辑:我刚刚意识到你可以model.set({})
用一个对象来做。例如model.set({start :{top:7}});
,但它有点笨重