Javascript knockoutjsv3-\u ko\u属性\u writers=未定义
我正试图让我的自定义绑定同时适用于可观察对象和普通对象。我遵循了这个问题的答案: 但是,如果查看执行allBindingsAccessor时返回的对象,则属性“\u ko\u property\u writers”未定义 有人知道在第三版淘汰赛中这一点有没有改变吗 编辑Javascript knockoutjsv3-\u ko\u属性\u writers=未定义,javascript,knockout.js,Javascript,Knockout.js,我正试图让我的自定义绑定同时适用于可观察对象和普通对象。我遵循了这个问题的答案: 但是,如果查看执行allBindingsAccessor时返回的对象,则属性“\u ko\u property\u writers”未定义 有人知道在第三版淘汰赛中这一点有没有改变吗 编辑 抱歉,我应该说,我正试图以一种可观察的不可知方式将值“写入”到模型中执行此操作的标准方法是使用ko.unwrap,如下所述: 例如: ko.bindingHandlers.slideVisible = { update
抱歉,我应该说,我正试图以一种可观察的不可知方式将值“写入”到模型中执行此操作的标准方法是使用
ko.unwrap
,如下所述:
例如:
ko.bindingHandlers.slideVisible = {
update: function(element, valueAccessor, allBindings) {
// First get the latest data that we're bound to
var value = valueAccessor();
// Next, whether or not the supplied model property is observable, get its current value
var valueUnwrapped = ko.unwrap(value);
// Grab some more data from another binding property
var duration = allBindings.get('slideDuration') || 400; // 400ms is default duration unless otherwise specified
// Now manipulate the DOM element
if (valueUnwrapped == true)
$(element).slideDown(duration); // Make the element visible
else
$(element).slideUp(duration); // Make the element invisible
}
};
在该示例中,
valueUnwrapped
是正确的,无论用户绑定到可观察对象还是普通对象。这对我很有帮助:
ko.expressionRewriting.twoWayBindings.numericValue = true;
ko.bindingHandlers.numericValue = {
...
}
它是在将绑定指定为双向后定义的。
因此,我可以在自定义绑定中使用类似的内容:
ko.expressionRewriting.writeValueToProperty(underlying, allBindingsAccessor, 'numericValue', parseFloat(value));
WriteValueTopProperty在内部定义为:
writeValueToProperty: function(property, allBindings, key, value, checkIfDifferent) {
if (!property || !ko.isObservable(property)) {
var propWriters = allBindings.get('_ko_property_writers');
if (propWriters && propWriters[key])
propWriters[key](value);
} else if (ko.isWriteableObservable(property) && (!checkIfDifferent || property.peek() !== value)) {
property(value);
}
}
嗨,对不起,我应该说,我正试图以一种可观察的不可知论的方式将值“写”回模型。我不确定我是否理解。您无法从自定义绑定写入不可观察的值(除非该值是对象并且您希望写入其属性之一)。如果调用
valueAccessor
传递一个普通值,比如一个数字,那么您将获得该数字的副本。您无法更改其原始位置。你会怎么写呢?好吧,这似乎是可能的,我只是想问一下,链接问题中提到的未记录的函数是否在v3中被删除了。我现在已经用一个肮脏的黑客程序让它工作了——如果没有人发布答案,我会发布,但我不会感到骄傲。不管你做了什么,它都不会像你说的那样干净。我认为这违背了击倒的设计原则,也许改变你的方法比写一篇肮脏的文章更有用?你到底想做什么?对一个同事来说,他只是在使用原始对象作为显示网格——我告诉过他,他应该为每一行使用一个自定义类,但是嘿。加上KO的默认绑定,例如“value”对原始属性很好,所以我想我应该尝试以类似的方式让我的自定义绑定工作。如果你只是通过映射插件传递原始对象,你应该这样做。这比使用自定义黑客获取基本上已经免费提供的功能更合理。国际海事组织。