Javascript Knockout.js中的foreach内部绑定不起作用

Javascript Knockout.js中的foreach内部绑定不起作用,javascript,knockout.js,Javascript,Knockout.js,我必须迭代一个动态数组,构建一个表单并验证它。我确实定义了error属性,但我得到一个错误,说“对象不支持属性或方法'error',我相信这是由标记触发的。我有一堆其他非数组属性,它们以相同的方式进行验证没有问题,我只是数组属性有绑定错误问题 所以在我的html中 <tbody data-bind="foreach: methToChange.nameTranslations"> <tr> &

我必须迭代一个动态数组,构建一个表单并验证它。我确实定义了error属性,但我得到一个错误,说
“对象不支持属性或方法'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>
稍后我初始化该值并创建可观察的错误,然后更新数组

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. 

nametransflations
array的定义与其他非数组字段的顺序相同,我的直觉是,我没有在
foreach

中正确调用它。假设我的基本结构正确,我认为问题在于$parent实际上与
methToChange
的父项相关d不是
名称翻译的父项

var模型={
方法更改:{
//许多其他财产
姓名翻译:ko.Array([{
LangName:‘Talaxion’,
翻译:“克林贡语”,
名称翻译:“某物”
}])
},
init:function(){
model.methToChange.nameTranslations.error=ko.可观察(false);
},
更新:功能(项目){
var模型=model.methToChange;
模型名称翻译(项目名称翻译);
},
validateNameTranslations:函数(项){
model.methToChange.nametransforms.error(true);
返回false;
}
}
model.init();
ko.应用绑定(模型);
.methods边界错误{
边框颜色:红色
}


我最终在主级别定义了一个名为ntError的变量,并使用了
$root.ntError()
调用它。在循环中没有其他东西起作用

我的第一个猜测是,
错误
在绑定时还不存在。您可能需要首先将
错误
定义为可观察的,然后在
初始化
期间仅更改其值@Jason,我也这么认为,但所有其他变量都是以相同的方式定义的……所以y这会有什么不同吗?在诉诸Jquery验证之前,我将尝试添加到模型中,看看这是否有帮助。这非常优雅,但总是需要更长的时间来实现。当我更仔细地查看您的代码时,我注意到的第二件事是,我不确定应该启用哪个对象
error
。绑定到$parent将其置于与
methToChange
相同的级别,但您的init将其置于更深的两个级别。如果init正确,那么我认为您可以删除$parent并将绑定保留为
'methods-border-error':error
。foreach上下文更改已经将上下文放置在nameTranslations对象内。$parent将让您回到ForEach之外您在nameTranslations observableArray上创建了一个新的可观察错误。$parent然后引用MethodChange。您希望错误确切在哪里?在MethodChange上,还是在nameTranslation本身上?
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.