订阅新模型

时间:2015-05-06 18:50:38

标签: knockout.js

在我的ViewModel中,我正在处理3种不同的模型可观察对象。

一切正常,除了我有一个可观察的地方,我试图通知用户,输入(或某些事件)失去焦点,该值应该是一个整数,如果不是。我还计划使用相同的逻辑发送ajax请求。

我之前从未尝试使用过空的observable,所以我有点困惑,如果我应该绑定一个事件处理程序或者我应该如何处理它。

型号:

    var deferredAccount = function() {
            var self = this;

            self.Id = ko.observable();
            self.accountNumber = ko.observable();
            self.participantId = ko.observable();
            self.taxPercentage = ko.observable();

        }

ViewModel :(删除了很多其他内容)

newAccount = ko.observable();
newAccount(new model.DeferredAccount());   <-- to the View

相关HTML

    <form class="form-horizontal" data-bind="with: newAccount">

                    <label class=" col-sm-5 control-label">Account Number: </label>
                    <input data-bind="value: accountNumber" class="col-sm-3 form-control" type="text" />

                    <label class=" col-sm-5 control-label">Tax Percentage: </label>
                    <input id="percent" data-bind="value: taxPercentage" class="col-sm-3 form-control" type="text" min="0" max="85" title="Enter Percentage in Decimal Format"/>
    </form>

对于taxPercentage,我想在lostFocus某些点验证该字段。我认为因为我不习惯处理这么多不同的动作,所以我对如何访问适当的可观察对象感到困惑。

1 个答案:

答案 0 :(得分:1)

你可能正在寻找扩展器。扩展程序是您在视图和可观察对象之间放置的过滤器。

淘汰赛文档很好地描述了这个过程,甚至可以简单地使用this railscasts episode

var deferredAccount = function() {
    var self = this;

    self.Id = ko.observable();
    self.accountNumber = ko.observable();
    self.participantId = ko.observable();
    self.taxPercentage = ko.observable().extend({numeric: 0});

}

<form class="form-horizontal" data-bind="with: newAccount">
    <label class="col-sm-5 control-label">Account Number: </label>
    <input data-bind="value: accountNumber" class="col-sm-3 form-control" type="text" />

    <label class=" col-sm-5 control-label">Tax Percentage: </label>
    <input id="percent" data-bind="value: taxPercentage" class="col-sm-3 form-control" type="text" min="0" max="85" title="Enter Percentage in Decimal Format"/>

</form>

无需特殊事件处理。

要强制执行最小值和最大值,请查看a fully implemented extender for rounding numbers