我对有些代码感到有点困惑,这些代码我没有像我期望的那样表现得很好.
我确定我做错了什么(考虑到这里的时间很晚,这可能是一件简单的事情),但我正在寻找一些明确的原因.
我正在使用:
jQuery 1.10.2
淘汰赛2.3.0
Bootstrap 3.0.3
我在我的ViewModel中定义了一个函数,它将一个observable设置为某个值.
这不是从我的代码中的任何其他地方调用的.
我data-bind="click: AddAnnouncement"
在一个按钮组的按钮上定义了一个绑定.
当ko.applyBindings(vm)
被调用时,AddAnnouncement
函数会触发,在我点击任何内容之前很久就会给我一个不希望的结果.
可以在JSFiddle中找到:http://jsfiddle.net/SeanKilleen/v8ReS/.
基本上,我有以下JavaScript代码:
var MyNamespace = MyNamespace || { ViewModel: function(){ 'use strict'; var self = this; self.AddingAnnouncement = ko.observable(false); self.AddAnnouncement = function(){ self.AddingAnnouncement(true); }; self.Start = function(){ self.AddingAnnouncement(false); }; self.Start(); } }; var vm; $(document).ready(function(){ 'use strict'; vm = new MyNamespace.ViewModel(); ko.applyBindings(vm); //do something with jQuery? Bind a VM? });
我的绑定代码也很基本(我想):
Add a new announcement
我认为有问题的代码正在执行以下操作:
定义一个名为的命名空间MyNamespace
(虽然可能不是最好的方式;这可能是问题的一部分?)
ViewModel
在命名空间内定义对象
为ViewModel
对象提供一个可观察的被调用AddingAnnouncment
函数和一个被调用的函数AddAnnouncement
,该函数设置AddingAnnouncement
为true.
定义一个Start
方法,确保AddingAnnouncement
默认设置为false;
调用该Start
方法作为其初始化的最后一步.
我认为我没有掌握JavaScript的某些标准行为或类似于敲除绑定模型的方式,但似乎在应用绑定时,knockout执行所有函数,即使对于单击绑定也是如此.但是,这对我来说没有意义,所以我打赌我错了.
有人开导我吗?谢谢!