【发布时间】:2018-06-02 09:59:19
【问题描述】:
我可以在自定义绑定的 init 块内创建一个 observableArray 吗? 另外,我想在 update 方法中使用这个 observableArray 来推送一些新元素。
循环 例如:
ko.bindingHandlers.yourBindingName = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var animateImageArray = ko.observableArray(["img1", "img2"]);
ko.applyBindings(animateImageArray);
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
//Also can I get a reference to animateImageArray here
}
};
HTML
<div class="customized-slider-wrapper" data-bind="yourBindingName: someData">
<div class="customized-slider" data-bind="foreach: animateImageArray">
<div class="individual-tile">
<img data-bind= "attr: {src: $data}" />
</div>
</div>
</div>
编辑:
在评论中尝试了以下代码
StopAnimation = setInterval(function () {
_index++;
if (_index >= imgArray.length) {
_index = 0;
}
$(temp[_index]).attr('src', imgArray[_index]);
toBeScrolledBy = slideWidth * _index;
$(scroller).css({
'transform': 'translateX(-' + toBeScrolledBy + 'px)'
});
}, 1500);
现在图像动画的顺序出错了。 第一个图像滑动和第二个加载,动画回到第一个而不是第三个,并且每次在图像 src 数组中传递一个新索引时都会发生这种情况。
【问题讨论】:
-
你在哪里使用
someData?通常绑定使用绑定到它的值(例如,通过使用ko.unwrap(valueAccessor())的结果)。另外,由于您的数组是静态的,因此不需要它是可观察的,也不需要提供init函数。如果数组不是静态的,它应该是你没有使用的someData。 -
是的,我正在使用 var data = ko.unwrap(valueAccessor());获取 someData 的值以向 dom 添加一些信息。我正在寻找一种在我的自定义绑定中拥有一个新的 Obeserable 数组的方法
-
您需要提供更多详细信息,我们才能为您提供有用的帮助。就目前而言,在
init中创建自己的可观察数组是没有意义的。 -
我创建了自定义绑定以在电子商务产品列表页面上显示产品磁贴。产品的每张图片有 3-8 张图片。当用户将鼠标悬停在一个图像上时,我想制作动画并开始图像的侧面展示。我教过一个可观察的数组是否可以一张一张地推送图像并将它们显示在视图中。这是否清除了场景?
-
一点(你应该编辑你的问题,而不是评论更多细节)——它告诉我可观察数组应该是你绑定到处理程序的数据的一部分(例如,部分
someData),而不是处理程序突然创建的东西。毕竟,它需要图片,而且这些图片因产品而异。