我很难理解什么时候应该使用()来调用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>我只是想知道是否有人知道关于何时以及如何在html和javascript中使用()来处理knockout.js变量的明确指导方针。
我目前正在重构我以前的代码以使用knockout,我想在开始进入对象的嵌套数组之前牢牢掌握概念,等等。我不想做假设。
对上述javascript的任何评论也非常受欢迎。
发布于 2013-02-12 14:51:19
如果变量var是一个可观察值,则使用var()获取它的值(因为可观察值实际上是返回当前值的函数)。但是有一个方便的例外:如果在数据绑定中引用的表达式解析为可观察类型,则可以省略段落,因为knockout.js将识别可观察类型。
通常,对于包含具有不可观察值的可观察数组的对象的可观察对象,您必须使用以下代码:
randomJ().innate()[0].star但是您的示例有一个缺陷: randomJ实际上是不可观察的!在这条线上
self.randomJ = new randomSquare;您可以将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();https://stackoverflow.com/questions/14825854
复制相似问题