KnockoutJS json 对象/可观察的“可见”绑定不起作用

Posted

技术标签:

【中文标题】KnockoutJS json 对象/可观察的“可见”绑定不起作用【英文标题】:KnockoutJS json object/observable "visible" binding not working 【发布时间】:2012-07-29 16:13:32 【问题描述】:

我正在尝试配置一个相当复杂的模型来将视图绑定到使用 KnockoutJS。

这是一个问题标记部分:

<input type="text" data-bind="visible: dialogSelectedCode.HasValue, value: dialogSelectedCodeValue"/>
<span data-bind="text: ko.toJSON(dialogSelectedCode)"></span>

从未显示输入元素,但我的“调试”范围显示了内容

"Code":"intInc_G","HasValue":true

如果“决策”数据隐藏在 JSON 对象中,绑定可见输入的正确方法是什么?

更新:这是一个相当复杂的fiddle of the problem。要进入问题对话框,运行小提琴,单击“添加块”并尝试在下拉输入中选择几个项目(尤其是第一个和第二个 - 因为它们清楚地表明 dialogSelectedCode 变量确实正在更新。

【问题讨论】:

能否提供更多代码(即 ViewModel 定义) 现在已经很大了。几分钟后我会想出一个小提琴来展示这个问题=) @MaximV.Pavlov 它必须是可观察的,visisble 属性才能在更改时更新。把它放在 JSON 中是行不通的。 我已经更新了问题正文以包含可以展示问题的小提琴。提前感谢您查看它。 @MaximV.Pavlov 这小提琴太疯狂了。我之前的评论不变,它不会更新,因为HasValue 是不可观察的。 【参考方案1】:

我认为您需要为 HasValue 属性创建一个计算值。您的绑定dialogSelectedCode.HasValue 不遵循可观察对象,它会检查可观察对象函数 上的HasValue。属性方式dialogSelectedCode().HasValue 抛出错误。创建一个可计算并让它进行测试works:

self.dialogSelectedCodeHasValue = ko.computed(function() 
    var selectedCode  = ko.utils.unwrapObservable(self.dialogSelectedCode);
    return selectedCode && selectedCode.HasValue;
);

【讨论】:

谢谢杰森。我的理解是它会按照我的设置方式工作,因为即使 .HasValue 不是可观察的,dialogSelectedCode 确实是,并且每次选择下拉框项目时整个值实际上都在变化。现在我知道这样不行。

以上是关于KnockoutJS json 对象/可观察的“可见”绑定不起作用的主要内容,如果未能解决你的问题,请参考以下文章

KnockoutJS - 可观察对象的可观察数组,包含来自 SQL 服务器的数据

Knockout JS:从 viewmodel 可观察数组创建 Json

将 KnockoutJS 可观察数组传递给 HTTP Post 控制器方法的 AJax 调用失败

KnockoutJS 3.X API 第八章 映射(mapping)插件

淘汰赛可观察格式

Knockoutjs ,取消可观察更新