Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向自定义绑定处理程序传递数据的最佳方法是什么_Javascript_Html_Knockout.js - Fatal编程技术网

Javascript 向自定义绑定处理程序传递数据的最佳方法是什么

Javascript 向自定义绑定处理程序传递数据的最佳方法是什么,javascript,html,knockout.js,Javascript,Html,Knockout.js,我正在业余时间为一些当前/未来的项目开发一些knockout.js绑定处理程序,我想知道传递多个参数的最佳方法是什么。(不供生产使用) 例如,我有一个“cssAnimateVisible”绑定处理程序,如下所示: <div data-bind="cssAnimateVisible: { isCssAnimateVisible, 'flipInY', 'flipOutY' }">Animation</div> HTML: <div data-bind="cssAni

我正在业余时间为一些当前/未来的项目开发一些knockout.js绑定处理程序,我想知道传递多个参数的最佳方法是什么。(不供生产使用)

例如,我有一个“cssAnimateVisible”绑定处理程序,如下所示:

<div data-bind="cssAnimateVisible: { isCssAnimateVisible, 'flipInY', 'flipOutY' }">Animation</div>
HTML:

<div data-bind="cssAnimateVisible: isCssAnimateVisible">Animation</div>
self.isCssAnimateVisible = ko.observable(false);
我可以关闭和打开observable,它将播放我希望它在该元素上播放的任何默认动画。大多数情况下,这种方法都很好用。但是,如果我想将默认动画更改为其他动画,而不是跳进跳出,我必须执行以下操作:

<div data-bind="cssAnimateVisible: { observable: isCssAnimateVisible, animation: 'flipInY', animationOut: 'flipOutY'}">Animation</div>
动画
如您所见,我传入了更多的变量,因为我不想为这个特定元素使用默认动画。这种方法是我目前在项目站点上使用的方法,但我不喜欢传入一个名为“observable”的变量,因为这似乎会使html控件膨胀,因此我将其缩小为:

<div data-bind="cssAnimateVisible: isCssAnimateVisible, animation: 'flipInY', animationOut: 'flipOutY'">Animation</div>
动画
正如您所看到的,它比上面的要短得多,但是它确实将其他参数从“cssAnimateVisible”的上下文中去掉了,这可能是一个潜在的缺点,因为它与其他自定义绑定的命名冲突

此外,我考虑过这样传递变量:

<div data-bind="cssAnimateVisible: { isCssAnimateVisible, 'flipInY', 'flipOutY' }">Animation</div>
动画
这使得它变得更短,而代价是必须知道传入参数的顺序

最后,我考虑为animate.css库中的各种动画创建许多不同的绑定处理程序,如下所示:

<div data-bind="cssBounceVisible: isCssAnimateVisible1">Animation</div>
<div data-bind="cssFlipVisible: isCssAnimateVisible2">Animation</div>
<div data-bind="cssLightSpeedVisible: isCssAnimateVisible3">Animation</div>
动画
动画
动画
这种方法增加了我的项目中的代码行,同时没有提供太多的灵活性。不过,它可能是所有数据绑定中最短的一个


有人知道处理这个问题的最佳方法吗?我最希望我的方法保持一致。谢谢大家!

Best是一个基于意见的术语,但将数据绑定的可观察对象包装成对象文字或为每个可观察对象使用单独的绑定名称在技术上也有区别


如果您想支持写入非可观察对象,则需要为每个要绑定的可观察对象使用单独的绑定名称,否则
ko.expressionRewriting.writeValueTopProperty
将无法写入非可观察对象。

最好是一个基于意见的术语,但是,将数据绑定的可观察对象包装成对象文字或为每个可观察对象使用单独的绑定名称,两者之间也存在技术上的差异

如果要支持写入非可观察对象,则需要为要绑定的每个可观察对象使用单独的绑定名称,否则
ko.expressionRewriting.writeValueTopProperty
将无法写入非可观察对象