Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
backbone.js直接设置模型内部属性哈希_Backbone.js - Fatal编程技术网

backbone.js直接设置模型内部属性哈希

backbone.js直接设置模型内部属性哈希,backbone.js,Backbone.js,使用Backbone.js我知道强烈建议使用该方法设置模型的属性,而不是直接修改 但是,除了不自动触发“更改”事件外,直接修改内部哈希还有哪些缺点或“副作用” 我面临的问题是,虽然set方法采用对象文字,但我需要使用在运行时确定的变量来分配左侧。谢谢 myModel.set({ myProperty:myValue;//myProperty是一个变量,因此这是无效语法 }) //vs myModel.attributes[myProperty]=myValue//myProperty是一个可以计

使用Backbone.js我知道强烈建议使用该方法设置模型的属性,而不是直接修改

但是,除了不自动触发“更改”事件外,直接修改内部哈希还有哪些缺点或“副作用”

我面临的问题是,虽然set方法采用对象文字,但我需要使用在运行时确定的变量来分配左侧。谢谢

myModel.set({
myProperty:myValue;//myProperty是一个变量,因此这是无效语法
})
//vs
myModel.attributes[myProperty]=myValue//myProperty是一个可以计算的变量
好吧,如果你看一下,你会发现
set
做了很多事情

如果您扩展了主干网,则会发生什么情况?该模型具有为您实现此功能的功能:

Backbone.Model.prototype.setByName = function(key, value, options) { 
    var setter = {}; 
    setter[key] = value; 
    this.set(setter, options); 
};
然后,您可以直接在模型上执行所需操作:

var model = new Backbone.Model();
model.setByName(myProperty, "bar");
这对我来说是个更好的解决办法

编辑

正如@earl3s所指出的,在主干网的最新版本中不再需要这样做。今天,您只需调用
model.set(myProperty,“bar”)
,它就可以完成您想要的功能。

在Brian Genisio提到的中,您可以阅读以下几行: 处理“key”、value和{key:value}样式的参数。 所以您可以只使用model.set(myProperty,“bar”,options)。
也许他们在Brian Genisio的帖子之后添加了这个功能。。我不知道。

我认为你的解决方案很好。此功能应合并到较新的主干版本中!还感谢您指出带注释的源代码;你说得对,我一开始就应该看一看。太好了!这段代码我已经写了十几遍了,从来没有想过要把它变成一种方法。:)顺便说一句:没有必要为此使用扩展
Backbone.Model.prototype.setByName=函数(…){…}
执行相同的操作。。。功能相同。只是一种不同的方式而已。@Derick Bailey:有趣。。。我认为
.extend
在扩展原型方面有一些额外的智能。。。不。它实际上是用于扩展任何具有更改集合的对象。没什么疯狂的。改变我的回答,承认这一点。谢谢。此功能已内置在
集合
方法中。为什么再加一次?您可以编写
model.set(stringProp,value)
model.set({prop:value})
@earl3s好吧,如果您不知道
prop
的名称(即prop是一个变量),那么第二种方法就不起作用了。IIRC,两年前(~0.5.0),当我写这篇文章时,你只能用对象文本设置(你的第一个机制不可用),所以这是唯一的方法。我将更新我的答案。这是正确的解决方案。
set
方法上已存在该功能。