首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >()的knockout.js指南

()的knockout.js指南
EN

Stack Overflow用户
提问于 2013-02-12 13:15:57
回答 1查看 77关注 0票数 2

我很难理解什么时候应该使用()来调用knockout.js中的变量。

让我们举个例子:

代码语言:javascript
复制
function RandomViewModel() {
    var self = this;
    self.randomJ = new randomSquare;
}

var randomSquare = ko.observable({
    innate: ko.observableArray([ { star: "randomStar", type: "starList" } ])
});

如果我想将div的文本设置为randomJ中的元素,代码如下:

代码语言:javascript
复制
<div data-bind="text: randomJ.innate()[0].star"></div>

但是,以下内容不起作用:

代码语言:javascript
复制
<div data-bind="text: randomJ().innate()[0].star"></div>
<div data-bind="text: randomJ.innate[0].star"></div>

我只是想知道是否有人知道关于何时以及如何在html和javascript中使用()来处理knockout.js变量的明确指导方针。

我目前正在重构我以前的代码以使用knockout,我想在开始进入对象的嵌套数组之前牢牢掌握概念,等等。我不想做假设。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-12 14:51:19

如果变量var是一个可观察值,则使用var()获取它的值(因为可观察值实际上是返回当前值的函数)。但是有一个方便的例外:如果在数据绑定中引用的表达式解析为可观察类型,则可以省略段落,因为knockout.js将识别可观察类型。

通常,对于包含具有不可观察值的可观察数组的对象的可观察对象,您必须使用以下代码:

代码语言:javascript
复制
randomJ().innate()[0].star

但是您的示例有一个缺陷: randomJ实际上是不可观察的!在这条线上

代码语言:javascript
复制
self.randomJ = new randomSquare;

您可以将observable用作构造函数。这不是预期的用法,并导致以下结果:您将获得一个新对象(不是函数,特别是不是可观察对象!)具有与可观测物相同的属性。后者是randomJ.innate实际上是randomSquare的原始可观察数组的原因。

它应该是:

代码语言:javascript
复制
self.randomJ = randomSquare;

或者直接:

代码语言:javascript
复制
self.randomJ = ko.observable({
    innate: ko.observableArray([ { star: "randomStar", type: "starList" } ])
});

如果你打算使用randomSquare作为几个观察点的构造器/工厂,你必须这样做:

代码语言:javascript
复制
var randomSquare = function() {
    return ko.observable({
        innate: ko.observableArray([ { star: "randomStar", type: "starList" } ])
    });
}
self.randomJ = randomSquare();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14825854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档