请参阅以下代码段:
ko.bindingHandlers.currencyFormat = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
ko.utils.registerEventHandler(element, 'keyup', function (event) {
var observable = valueAccessor();
debugger;
observable(formatInput(element.value));
observable.notifySubscribers(5);
});
},
update: function (element, valueAccessor, allBindingsAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
$(element).val(value);
}
};
我遇到了一些问题,我无法理解为什么我将自己作为扩展器敲除FormatCurrency插件的实例。 当我在要在更改事件中格式化的字段中插入值(这将是将字段的值更新为输入的值)时,错误正在发生“数字不是函数”,因为正如我在调试中看到的那样实际上,valueAcessor创建的变量“observable”是一个数字(本例为0):
但是看到我反映我的例子,变量“observable”不是数字,如下所示:
function d(){if(0<
arguments.length)return d.Pa(c,arguments[0])&&(d.X(),c=arguments[0],d.W()),this;a.k.Jb(d);return c}
任何人都知道这段代码可能会出现什么问题?
html代码:
<input id="valorRealizado" class="form-control" data-bind='currencyFormat: ValRealizado' />
我会尝试更好地解释这个场景。在我的应用程序中,我将加载一个对象列表,在这种情况下将是“Andamentos”对象。这个对象列表来自我的Controller(我正在使用Asp.NET MVC4)。列表可能是空的或不是。在客户端应用程序中,可以逐个添加(通过“viewModel.Andamentos.push({...})”)更多项目,并单独保存每个项目。 从技术上讲,我只使用该对象两次,加载它(通过“viewModel.Andamentos(result.Andamento);”),当我向“Andamentos”添加更多元素。
答案 0 :(得分:1)
valueAccessor
是一个包装传递给自定义绑定的函数。
如果你传递了一个可观察的信息:
<div data-bind="currencyFormat: myProperty"></div>
==> valueAccessor = function() { return myProperty; }
valueAccessor() is the observable
如果传递了observable的值:
<div data-bind="currencyFormat: myProperty()"></div>
==> valueAccessor = function() { return myProperty(); }
valueAccessor() is the value of the observable
作为旁注,当需要valueAccessor
中包含的值时,自定义绑定的一个好习惯是调用:
ko.unwrap(valueAccessor())
// valueAccessor() returns the value/observable depending on custom binding input
// ko.unwrap() will return the value if it has it already, otherwise will
// execute the observable to get the value.