Knockout.js 敲除中的绑定命名空间

Knockout.js 敲除中的绑定命名空间,knockout.js,Knockout.js,我创建了一个敲除组件,并为其创建了一些自定义绑定。其中一个是名为textInput的绑定 现在我想升级到Knockout 3.2,但发现他们也创建了一个新的textInput绑定,这将与我的绑定冲突 我想升级到新版本,不想重命名我的绑定,因为它在很多地方被引用。我需要一些类似于绑定的“名称空间”。我可以使用它来组织绑定,以避免与其他本机或自定义绑定冲突。如果您想“命名”绑定处理程序,只需使用“虚线”名称创建它们,例如“my.namespace.textInput”。这样,您还可以通过包含“名称空

我创建了一个敲除组件,并为其创建了一些自定义绑定。其中一个是名为
textInput
的绑定

现在我想升级到Knockout 3.2,但发现他们也创建了一个新的
textInput
绑定,这将与我的绑定冲突


我想升级到新版本,不想重命名我的绑定,因为它在很多地方被引用。我需要一些类似于绑定的“名称空间”。我可以使用它来组织绑定,以避免与其他本机或自定义绑定冲突。

如果您想“命名”绑定处理程序,只需使用“虚线”名称创建它们,例如“my.namespace.textInput”。这样,您还可以通过包含“名称空间”来使用它们

这方面的一个例子是:

ko.bindingHandlers['my.namespace.textInput'] = {
    //Same content as you already have in your binding handler.
};
然后,此绑定处理程序的用法可能如下所示:

<input data-bind="my.namespace.textInput: myValueProperty" />


我在jsfiddle上举了一个使用这种命名方法的例子。

我以为我以前尝试过这种方法,但没有成功。我当时认为这是因为KO将绑定解析为JS对象文本,而dots在属性名中无效。我将再次测试并返回。我根据您的解决方案更改了所有绑定,它们工作正常。唯一的缺点是VisualStudio无法识别此语法,并将其视为错误。感谢您的回答我以前尝试它时它没有起作用,因为我是这样编写绑定的
ko.bindingHandlers.my={namespaced:{bindingHandler:{update:…}}您也可以只使用前缀而不是“名称空间”。在您自己的所有自定义绑定前面加上“c”、“my”、“公司/产品名称”或类似名称。这样,它在VS中也可以正常工作。关于属性名称中的点,这是一个javascript特性,您可以使用点或索引器来引用属性。在第二种情况下,您可以在属性名称中使用一些字符,而这些字符在其他情况下是无法使用的。但是,只使用前缀而不是尝试命名名称可能是一个更好的主意。