繁体   English   中英

()的

[英]knockout.js guideline for ()

我在理解何时应该使用()来调用基因敲除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中使用tickout.js变量处理的明确指南。

我目前正在重构以前的代码以使用剔除功能,并且在开始跳入嵌套的对象数组等之前,我想牢牢掌握概念。我不想做任何事情。

对以上javascript的任何评论也非常欢迎。

如果变量var是可观察的,则可以通过var()获得其 (因为可观察的实际上是返回当前值的函数)。 但是,有一个方便的例外:如果您在数据绑定中引用的表达式解析为可观察的,则您可能会忽略这些附加条件,因为kickout.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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM