绑定在 Knockout.js 中的 foreach 内部不起作用
Binding not working inside foreach in Knockout.js
我必须遍历动态数组并构建表单并验证它。我确实定义了错误 属性,但我收到一条错误消息 "object doesn't support property or method 'error'
,我相信这是由标记触发的。我有一堆其他的非数组属性以相同的方式验证没问题,我只有数组一个有绑定错误问题。
所以在我的 html 我有
<tbody data-bind="foreach: methToChange.nameTranslations">
<tr>
<td><div class="method-lb-1"><label data-bind="text:LangName"></label></div></td>
<td><div class="method-left">
<input type="text" class="input-xl" maxlength="40" placeholder="required"
onblur="validateNameTranslations()"
data-bind="value:Translation, css: { 'methods-border-error': $parent.error() }" />
</div>
</td>
</tr>
</tbody>
在我的js中,下面的模型
nameTranslations 是一个对象数组 {LangName, Translation}
methToChange: {
//many other properties
nameTranslations: ko.observableArray([])
},
稍后我初始化值并创建错误可观察对象,然后更新数组
init: function() {
model.methToChange.nameTranslations.error = ko.observable(false);
}
update: function() {
var model = model.methToChange;
model.nameTranslations(item.NameTranslations);
},
css: { 'methods-border-error': $parent.error() }" this part causes an issue and throws an error saying that error property is undefined.
nameTranslations
数组的定义与其他非数组字段的顺序相同,我的直觉是我没有在 foreach
.[=17= 中正确调用它]
假设我的基本结构是正确的,我认为问题是 $parent 实际上与 methToChange
的父级相关,而不是 nameTranslations
的父级。
var model = {
methToChange: {
//many other properties
nameTranslations: ko.observableArray([{
LangName: 'Talaxion',
Translation: 'Klingon',
NameTranslations: 'something'
}])
},
init: function() {
model.methToChange.nameTranslations.error = ko.observable(false);
},
update: function(item) {
var model = model.methToChange;
model.nameTranslations(item.NameTranslations);
},
validateNameTranslations: function(item) {
model.methToChange.nameTranslations.error(true);
return false;
}
}
model.init();
ko.applyBindings(model);
.methods-border-error{
border-color: red
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<table>
<tbody data-bind="foreach: methToChange.nameTranslations">
<tr>
<td>
<div class="method-lb-1"><label data-bind="text:LangName"></label></div>
</td>
<td>
<div class="method-left">
<input type="text" class="input-xl" maxlength="40" placeholder="required" data-bind="value:Translation, css: { 'methods-border-error': $parent.methToChange.nameTranslations.error }, event: {blur: $parent.validateNameTranslations}" />
</div>
</td>
</tr>
</tbody>
</table>
我最终在主层上定义了一个名为 ntError 的变量,并使用 $root.ntError()
来调用它。循环内没有其他工作
我必须遍历动态数组并构建表单并验证它。我确实定义了错误 属性,但我收到一条错误消息 "object doesn't support property or method 'error'
,我相信这是由标记触发的。我有一堆其他的非数组属性以相同的方式验证没问题,我只有数组一个有绑定错误问题。
所以在我的 html 我有
<tbody data-bind="foreach: methToChange.nameTranslations">
<tr>
<td><div class="method-lb-1"><label data-bind="text:LangName"></label></div></td>
<td><div class="method-left">
<input type="text" class="input-xl" maxlength="40" placeholder="required"
onblur="validateNameTranslations()"
data-bind="value:Translation, css: { 'methods-border-error': $parent.error() }" />
</div>
</td>
</tr>
</tbody>
在我的js中,下面的模型
nameTranslations 是一个对象数组 {LangName, Translation}
methToChange: {
//many other properties
nameTranslations: ko.observableArray([])
},
稍后我初始化值并创建错误可观察对象,然后更新数组
init: function() {
model.methToChange.nameTranslations.error = ko.observable(false);
}
update: function() {
var model = model.methToChange;
model.nameTranslations(item.NameTranslations);
},
css: { 'methods-border-error': $parent.error() }" this part causes an issue and throws an error saying that error property is undefined.
nameTranslations
数组的定义与其他非数组字段的顺序相同,我的直觉是我没有在 foreach
.[=17= 中正确调用它]
假设我的基本结构是正确的,我认为问题是 $parent 实际上与 methToChange
的父级相关,而不是 nameTranslations
的父级。
var model = {
methToChange: {
//many other properties
nameTranslations: ko.observableArray([{
LangName: 'Talaxion',
Translation: 'Klingon',
NameTranslations: 'something'
}])
},
init: function() {
model.methToChange.nameTranslations.error = ko.observable(false);
},
update: function(item) {
var model = model.methToChange;
model.nameTranslations(item.NameTranslations);
},
validateNameTranslations: function(item) {
model.methToChange.nameTranslations.error(true);
return false;
}
}
model.init();
ko.applyBindings(model);
.methods-border-error{
border-color: red
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<table>
<tbody data-bind="foreach: methToChange.nameTranslations">
<tr>
<td>
<div class="method-lb-1"><label data-bind="text:LangName"></label></div>
</td>
<td>
<div class="method-left">
<input type="text" class="input-xl" maxlength="40" placeholder="required" data-bind="value:Translation, css: { 'methods-border-error': $parent.methToChange.nameTranslations.error }, event: {blur: $parent.validateNameTranslations}" />
</div>
</td>
</tr>
</tbody>
</table>
我最终在主层上定义了一个名为 ntError 的变量,并使用 $root.ntError()
来调用它。循环内没有其他工作