淘汰赛 - 通知财产变更

时间:2013-12-29 11:11:02

标签: javascript wpf mvvm knockout.js textbox

我尝试像WPF-MVVM一样使用Knockout 在WPF中,有一个选项可以通知VM更改属性 例如:如果我有一个textBox,我可以使用UpdateSourceTrigger=PropertyChanged每次点击通知VM。

<Grid DataContext="MyVM">
    <TextBox Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</Grid>

在Knockout中,我构建了这个简单的应用程序:

VM:

function AppViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");

this.fullName = ko.computed(function() {
    return this.firstName() + " " + this.lastName();    
}, this);


}

ko.applyBindings(new AppViewModel());

查看:

<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>

<p>Full name: <strong data-bind="text: fullName"></strong></p>

我正在尝试 但没有成功 ,要更新textBox上的fullName 输入点击(不是onblur)。

修改

代码工作正常。 我只是希望姓氏将在firstname / lastname文本框中写入 时更新

现在它已更新 onblur ,在写作时没有更新。

2 个答案:

答案 0 :(得分:3)

为了更改输入的更新模式,因为您建议在淘汰赛中有一些内置方法来实现此目的。

请参阅此参考:http://knockoutjs.com/documentation/value-binding.html

特别是关于价值更新的部分。

在这种情况下,您可以使用valueUpdate: 'afterkeydown'来更新绑定。

在这个例子中需要改变的只是你的绑定。

<p>First name: <input data-bind="value: firstName, valueUpdate: 'afterkeydown'" /></p>
<p>Last name: <input data-bind="value: lastName, valueUpdate: 'afterkeydown'" /></p>

<p>Full name: <strong data-bind="text: fullName"></strong></p>

<button data-bind="click: capitalizeLastName">Go caps</button>

更新了JSFiddle:http://jsfiddle.net/infiniteloops/en6AR/1/

答案 1 :(得分:1)

您的代码逻辑上正常,您的问题是this函数内的capitalizeLastName误用。

在您的情况下,this关键字指的是函数所属的对象,如果函数不属于您的View-Model对象,则指向window对象。这就是为什么在大多数KnockoutJS示例中,我们在View-Model定义的第一行使用var self=this;来获取对View-Model对象的引用。

Updated working demo based on your code

检查以下SO问题以便更好地进行处理:

  1. In knockout.js, why “this” is being assigned to “self”?
  2. this inside function
  3. <强> 更新

    为了在编写 第一个名称/姓氏文本框时更新您的视图 ,您只需要将valueUpdate: 'afterkeydown'添加到绑定中。

    来自KnockoutJS documentation

      

    valueUpdate

         

    如果你的绑定还包含一个名为valueUpdate的参数,那么这个   定义KO应该用来检测更改的其他浏览器事件   除了改变事件。以下字符串值最多   通常有用的选择:

         

    “afterkeydown” - 在用户开始时立即更新您的视图模型   输入一个字符。这可以通过捕获浏览器的keydown事件来实现   并异步处理事件。

    Updated Demo