knockout.js - 在按键和点击事件上更新可观察的

标签 knockout.js knockout-2.0

我有一个看起来像这样的值绑定(bind):

<textarea class="form-control" placeholder="Comments" rows="10" data-bind="value: $root.GetTabComment($data).Comment, valueUpdate: 'keyup'"></textarea>

我使用 keyup 的原因是因为我设置了“键入时保存”系统。这在用户打字时效果很好,但如果他们通过拼写检查纠正拼写(使用鼠标点击,根本不用键盘),绑定(bind)将不会更新。

绑定(bind)变量 Comment 声明为:

Comment = ko.observable("").extend({throttle: 1000})

订阅很简单:

Comment.subscribe(function(){
  //save code
});

有什么方法可以让我在单击按钮时强制绑定(bind)采用文本区域的当前值?

最佳答案

你可以尝试使用 input 而不是 keyup:

valueUpdate: 'input'

KnockoutJS - The "value" binding :

"input" - updates your view model when the value of an <input> or <textarea> element changes. Note that this event is only raised by reasonably modern browsers (e.g., IE 9+).

这是我发现并改编的示例 JSFiddle ( originally authored by Michael Best),它说明了它的用法,它处理击键和鼠标点击以及节流:

Demo JSFiddle

HTML:

<p>Type stuff here: 
    <input data-bind='value: instantaneousValue, valueUpdate: "input"' /></p>

<p>Current throttled value: <b data-bind='text: throttledValue'> </b></p>

<div data-bind="visible: loggedValues().length > 0">
    <h3>Stuff you have typed:</h3>
    <ul data-bind="foreach: loggedValues">
        <li data-bind="text: $data"></li>
    </ul>
</div>

JS:

function AppViewModel() {
    this.instantaneousValue = ko.observable();
    this.throttledValue = ko.computed(this.instantaneousValue)
                            .extend({ throttle: 400 });

    // Keep a log of the throttled values
    this.loggedValues = ko.observableArray([]);
    this.throttledValue.subscribe(function (val) {
        if (val !== '')
            this.loggedValues.push(val);
    }, this);
}

ko.applyBindings(new AppViewModel());

关于knockout.js - 在按键和点击事件上更新可观察的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25747295/

相关文章:

javascript - knockout html 绑定(bind)与内部的另一个绑定(bind)

asp.net-mvc - 如何对 MVC 传递的每个项目列表的属性应用 knockout 验证?

javascript - 具有内联编辑功能的 Knockout CRUD 表

asp.net-mvc - 没有 ajax 的 knockout 发布嵌套(主要细节)表格(普通表格发布)

knockout.js - Durandal 子路由 (Hottowel) 生命周期回调

javascript - 如何在 Knockout JS 中强制应用绑定(bind)

jquery - ehynds jquery-multiselect 的一个问题

css - 当显示其他元素时,使用 CSS 防止元素在 DOM 中四处移动

javascript - 使用 knockoutjs 绑定(bind)和显示字典

javascript - 添加 ajax 后, knockout 可观察数组未更新