Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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 Knockout.js viewmodel更改,但复选标记不';不要在已发布的网站上更改_Javascript_Visual Studio_Visual Studio 2013_Knockout.js - Fatal编程技术网

Javascript Knockout.js viewmodel更改,但复选标记不';不要在已发布的网站上更改

Javascript Knockout.js viewmodel更改,但复选标记不';不要在已发布的网站上更改,javascript,visual-studio,visual-studio-2013,knockout.js,Javascript,Visual Studio,Visual Studio 2013,Knockout.js,我正在使用一个Razor页面,该页面使用Knockout.js进行接口处理。虽然viewmodel会更改值,并且数据库在保存时会正确存储这些值,但单击时复选标记不会更改 我研究了类似的问题,发现。不幸的是,虽然使Knockout click事件返回true允许复选标记在visualstudio中运行时在视觉上发生更改,但标记在已发布的开发站点上不会发生更改 Razor中的复选框定义为: <div class="col-md-3"> <label class="chec

我正在使用一个Razor页面,该页面使用Knockout.js进行接口处理。虽然viewmodel会更改值,并且数据库在保存时会正确存储这些值,但单击时复选标记不会更改

我研究了类似的问题,发现。不幸的是,虽然使Knockout click事件返回true允许复选标记在visualstudio中运行时在视觉上发生更改,但标记在已发布的开发站点上不会发生更改

Razor中的复选框定义为:

<div class="col-md-3">
     <label class="checkbox-inline" for="NeedsFurtherReview">
         <input id="NeedsFurtherReview" type="checkbox" data-bind="checked: $parent.NeedsFurtherReview, visible: !$parent.HasBeenProcessed(), click: $parent.MarkCheckToggled()" /> Further Review Needed
     </label>
 </div>
 <div class="col-md-3">
     <label class="checkbox-inline" for="PendingFinalization" data-bind="visible: !$parent.HasBeenProcessed()">
         <input id="PendingFinalization" type="checkbox" data-bind="checked: $parent.PendingFinalization, enable: $parent.CanBeProcessed(), visible: !$parent.HasBeenProcessed(), click: $parent.MarkCheckToggled()" /> Ready for Final Processing
     </label>
 </div>
奇怪的是,它在IE中工作得很好。它实际上在IE中工作得很好,之前没有从MarkCheckToggled返回,在单击事件中被称为$parent.MarkCheckToggled。事实上,IE现在在VisualStudio中单击该框时会抛出一个异常,但它不会阻止它运行,也不会以任何可视方式在已发布的站点上抛出此错误

中第4190行第25列的未处理异常

0x800a01b6-JavaScript运行时错误:对象不支持属性 或方法“应用”


提前感谢您的建议。我很乐意提供进一步的细节。这是我关于堆栈溢出的第一个问题,如果这个问题没有尽可能好地提出,我提前表示歉意。

单击
绑定需要函数引用。因此,您可能希望
单击:$parent.MarkCheckToggled
而不是
单击:$parent.MarkCheckToggled()

否则,链接的答案是正确的,您需要从单击处理程序
返回true

但也许更好的方法是链接到
更改
事件,而不是
单击

change:$parent.MarkCheckToggled

首先,我要澄清一点:knockout是一种客户端技术,它不在乎部署到哪里。如果在本地运行和部署时存在差异,则差异必须取决于客户端或客户端资产的服务方式

至于在IE中工作良好而不返回,这取决于您所指的IE版本

至于您的错误:单击绑定需要函数引用,因此您应该将该部分更改为
click:$parent.MarkCheckToggled


然而,我认为有一种更容易理解的方法,可以在knockout中绑定到您没有利用的模型。您可以响应模型更改,而不是响应UI事件。在这种情况下,我希望对
NeedsFurtherReview
PendingFinalization
观察值进行更改,并启动MarkCheckToggled函数作为响应

所有伟大的答案,尽管我认为这一个帮助我以一种击倒型的心态思考这一点,最好的订阅方式。我能够通过使用它来解决这个问题。关于单击绑定到函数引用的建议也非常有用。另外,关于记住Knockout是一种客户端技术的建议让我想到了它不能在服务器上工作的无稽之谈。在解决了清除缓存所需的问题后,现在一切都很顺利!感谢您对新加入SO的人的耐心,以及对淘汰赛的耐心!
Self.PendingFinalization = ko.observable(pendingFinalization);

Self.CheckToggled = ko.observable(false);

Self.MarkCheckToggled = function () {
    Self.CheckToggled(true);
    return true;
};