【发布时间】:2019-06-03 19:08:44
【问题描述】:
我正在尝试在 Knockout JS 中创建一个广播组,这是模板代码
<p>Selected Plan <div data-bind="text: selectedPlan"></div></p>
<div data-bind="foreach: plans">
<label>
<input type="radio" name="plan" data-bind="attr: {value: id}, checked: $root.selectedPlan"/>
<span data-bind="html: title"></span>
<div data-bind="text: desc"></div>
</label>
</div>
在组件selectePlan和plans注册如下
this.plans = ko.observableArray([/* array of plans */]);
this.selectedPlan = ko.observable('xxxxx');
我已验证xxxxx 是this.plans 中的有效条目。尽管如此,控制台中还是会出现错误
knockout.js:3391 Uncaught TypeError: Unable to process binding “foreach: function(){return plans }”消息:无法处理 绑定“检查:函数(){return $root.selectedPlan}”消息: 无法读取未定义的属性“selectedPlan”
由于某种原因,$root 关键字似乎是 undefined...
编辑: 计划结构
[{
id: 'xxxxx',
desc: 'This is a great plan',
title: '<strong>Save with great plan</strong>',
},
...
]
【问题讨论】:
-
this.plans = ko.observableArray([/* array of plans */]);plans的结构是什么?看来您根本不需要使用 $root ,因为您有foreach...它们只是字符串吗? -
@Akrion 我不需要
$root来正确访问组件(并且知道当前选择),因此只选择正确的输入吗?顺便说一句 - 在问题中添加了plans的结构 -
@quickshiftin 请看一下我的回答,因为我认为它可能会解决您的问题,而不是作为已接受的解决方案提供的有效解决方法。
标签: knockout.js