簡體   English   中英

淘汰賽中的惰性評估對象綁定問題

[英]Issue with lazy evaluated object binding in knockout

我有以下綁定

<ul data-bind="foreach: tubeRack.containers">
    <li data-bind="drop: { handler: $parent.dropHandler.bind(null, $index()) }">
    ...

問題是dropHandler.bind顯然僅在綁定中使用時才被求值,這使得$index()始終返回最后一個元素的索引。

我是在做錯什么,還是有辦法使dropHandler綁定到列表中元素的每個索引?

drop綁定定義如下

ko.bindingHandlers.drop = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, context) {
        var self = this;

        var options = valueAccessor();
        self.accept = options.accept || _.constant(true);
        self.handler = options.handler;

        $(element).droppable({
            tolerance: 'pointer',
            accept: function (draggable) {
                return self.accept(dragData);
            },
            drop: function(evt, ui) {
                self.handler(dragData);
            }
        });
    }
};

答案是,綁定this保持了愚蠢的引用,並對其設置了處理程序功能,導致handler變量被覆蓋。

由於index()屬於foreach,因此您已正確識別,因此在評估該foreach時它只會具有正確的值。 因此,我建議采用以下解決方法來強制及時進行評估。 不幸的是,我無法對其進行測試,但是它至少應該能夠作為提示:

<li data-bind="drop: { handler: (function(idx) { $parent.dropHandler.bind(null, idx); })($index()) }">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM