我很难理解何时应该使用()在knockout.js中调用我的变量。
比如说:
function RandomViewModel() {
var self = this;
self.randomJ = new randomSquare;
}
var randomSquare = ko.observable({
innate: ko.observableArray([ { star: "randomStar", type: "starList" } ])
});
如果我想将div的文本设置为randomJ中的元素,那么这就是代码:
<div data-bind="text: randomJ.innate()[0].star"></div>
以下不起作用:
<div data-bind="text: randomJ().innate()[0].star"></div>
<div data-bind="text: randomJ.innate[0].star"></div>
我只是想知道是否有人知道关于何时以及如何()应该与knockout.js变量处理一起使用的明确指南 - 在html和javascript中。
我目前正在重构我以前的代码以使用knockout,我想在开始跳转到嵌套的对象数组之前牢牢抓住概念。我宁愿不做假设。
对上述javascript的任何评论也都非常受欢迎。
答案 0 :(得分:1)
如果变量var
是一个可观察对象,则使用var()
得到值(因为observable实际上是返回当前值的函数)。但是有一个方便的例外:如果你在数据绑定中引用的表达式解析为一个observable,你可能省略了parantheses,因为knockout.js会识别可观察的类型。
通常,对于包含具有可观察的不可观察值数组的对象的observable,您必须使用它:
randomJ().innate()[0].star
但是你的例子有一个缺陷:randomJ实际上是没有观察到的!在这一行
self.randomJ = new randomSquare;
使用observable作为构造函数。这不是预期的用法,并导致以下结果:您获得一个新对象(不是一个函数,特别是一个不可观察的!),它具有与observable相同的属性。后者是randomJ.innate实际上是randomSquare的原始可观察数组的原因。
它应该是:
self.randomJ = randomSquare;
或直接:
self.randomJ = ko.observable({
innate: ko.observableArray([ { star: "randomStar", type: "starList" } ])
});
如果您打算将randomSquare用作多个可观察对象的构造函数/工厂,则必须这样做:
var randomSquare = function() {
return ko.observable({
innate: ko.observableArray([ { star: "randomStar", type: "starList" } ])
});
}
self.randomJ = randomSquare();