Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套的ViewModel相关方法不';行不通_Javascript_Mvvm_Kendo Ui - Fatal编程技术网

Javascript 嵌套的ViewModel相关方法不';行不通

Javascript 嵌套的ViewModel相关方法不';行不通,javascript,mvvm,kendo-ui,Javascript,Mvvm,Kendo Ui,我正在开发一个数据审计web应用程序,它有一个模型,包含由旧值、新值和当前值字段组成的多个字段集。当前值是一个计算字段(按KO术语),它使用相当简单的逻辑来决定当前值应使用旧值还是新值(基本上,如果有新值,则使用它,否则显示旧值)。在整个表单中大约有20个这样的字段集,我不想为它们单独调用kendo.bind 下面是我希望能够做的一个例子(文档中说应该可以,但是不行): 上述代码导致FieldBlock.DisplayValue始终返回未定义。奇怪的是,如果我直接将FieldBlock对象传递

我正在开发一个数据审计web应用程序,它有一个模型,包含由旧值、新值和当前值字段组成的多个字段集。当前值是一个计算字段(按KO术语),它使用相当简单的逻辑来决定当前值应使用旧值还是新值(基本上,如果有新值,则使用它,否则显示旧值)。在整个表单中大约有20个这样的字段集,我不想为它们单独调用
kendo.bind

下面是我希望能够做的一个例子(文档中说应该可以,但是不行):

上述代码导致
FieldBlock.DisplayValue
始终返回未定义。奇怪的是,如果我直接将
FieldBlock
对象传递给
kendo.observable
(不是作为匿名对象的属性值),那么依赖方法确实有效。展示什么是有效的,但也展示了我试图避免的

这是预期的行为,还是我遗漏了一些简单的东西?我使用的是2012.01.322版本

如果我没有遗漏什么,我能做些什么来让剑道用户界面(注意,我不是js忍者,所以编辑他们的代码不太可能)?也许有更好的方法来实现这种行为


希望通过向我信任的社区提出这个问题,我可能会得到更积极的回应,我最终找到了一个解决办法(这是可行的,但我认为这不是一个真正的解决办法)。也许有更多javascript经验的人可以提供如何清理它的指针

问题似乎是我的依赖方法返回了
undefined
,因为我当时使用的是
this.get(“oldValue”)
,而我本应该使用
this.get(“phoneNumber.oldValue”)
。这似乎是一个范围问题。为了处理要传递给
get
的fieldName部分,我将其作为函数对象的参数,如下所示:

函数字段块(旧值、新值、字段名){
this.OldValue=OldValue;
this.NewValue=NewValue;
this.DisplayValue=函数(){
var newValue=this.get(fieldName+“.newValue”);
if(String.IsNullOrEmpty(newValue))
返回此.get(fieldName+“.OldValue”);
返回新值;
};
}
剑道绑定($(“#练习切分”),剑道可观察({
phoneNumber:新字段块(“111-111-1111”,空,“phoneNumber”),
传真号码:新字段块(“999-999-9999”,空,“传真号码”)
})); 
就像我说的,这看起来很脏,但确实有效。我还不确定在需要时如何处理另一层嵌套,但至少我知道问题所在


从Telerik的Atanas得知,它实际上是一个bug:

您好,谢谢您的澄清。我确认这是一个bug。 当存在嵌套视图模型时,“this”上下文是错误的。在你的 示例“this”应该是“phone”对象,但它是“viewModel”

我找到了一个补丁,这将是下一个官方版本的一部分。直到 然后,您可以使用找到的解决方法

感谢您报告此问题

问候,, 阿塔纳斯·科切夫 Telerik团队

希望在其他人开始采用他们的MVVM解决方案时,它会被修复

<div id="practiceSection">
    <div id="phoneNumber">
        <h4>Phone Number</h4>
        <span>Display Value:</span>
        <input id="displayPhoneNumber" data-bind="value: phoneNumber.DisplayValue"/><br/>
        <span>Old Value:</span>
        <input id="oldPhoneNumber" data-bind="value: phoneNumber.OldValue"/><br/>
        <span>New Value:</span>
        <input id="newPhoneNumber" data-bind="value: phoneNumber.NewValue"/><br/>
    </div>
</div>​