Javascript knockoutjsv3-\u ko\u属性\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

我正试图让我的自定义绑定同时适用于可观察对象和普通对象。我遵循了这个问题的答案:

但是,如果查看执行allBindingsAccessor时返回的对象,则属性“\u ko\u property\u writers”未定义

有人知道在第三版淘汰赛中这一点有没有改变吗

编辑


抱歉,我应该说,我正试图以一种可观察的不可知方式将值“写入”到模型中

执行此操作的标准方法是使用
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”对原始属性很好,所以我想我应该尝试以类似的方式让我的自定义绑定工作。如果你只是通过映射插件传递原始对象,你应该这样做。这比使用自定义黑客获取基本上已经免费提供的功能更合理。国际海事组织。