2012-10-19 80 views
1

我需要將click:事件中的數據傳遞到另一個div。這裏是一個場景:KnockoutJS:將點擊事件數據傳遞給div

頁面的一邊有一個鏈接。

<a data-bind="text: Name, click: $root.editAction"></a> 

在頁面的另一邊,有一個隱藏的div。

<div data-bind="if: $root.editActionShow"> 
    <input type="text" data-bind="value: Name"/> 
</div> 

我需要能夠從click:事件傳遞$data,做隱藏股利。

也許我過想這,但我viewModel有很多不同的ActionsviewModel.DataGroups.DataGroup.ActionDataGroup深埋,並且只有1 HTML表單編輯操作的信息,所以我無法弄清楚如何使窗體只能說明我想要編輯的一個特定操作。

這是另一個踢球者。我不想在我的viewModel中添加任何可觀察的事物。原因是我必須做.toJS()映射到最後,然後將JSON轉換爲XML,這必須針對嚴格的模式進行驗證,因此有額外的元素是一件壞事。它不會通過驗證,除非我在轉換之前手動刪除它們。但是,我可以將this.blah = function() {}對象添加到我的viewModel,因爲.toJS()在轉換過程中將它們剝離。

UPDATE:

AAAND解決這一切都是手了熱鬧

viewModel.editAction = function(data) { 
    viewModel.editActionFormShow(true); 
    ko.applyBindings(data, $('#myHiddenDiv')[0]); 
}; 

回答

1

據我瞭解,你想要的東西就像一個「點擊編輯」功能,它可以是隻用2個自定義綁定就能很好地解決問題!

這種方法的巨大優勢是你不會監視你的viewModel與額外observables。

綁定:

ko.bindingHandlers.hidden = { 
    update: function(element, valueAccessor) { 
     var value = ko.utils.unwrapObservable(valueAccessor()); 
     ko.bindingHandlers.visible.update(element, function() { 
       return!value; }); 
     } 
    }; 

ko.bindingHandlers.clickToEdit = { 
    init: function(element, valueAccessor,allBindingsAccessor){ 
     var value = valueAccessor(), 
      input = document.createElement('input'), 
         link = document.createElement('a'); 

     element.appendChild(input); 
        element.appendChild(link); 

        value.isEditing = ko.observable(false); 

        ko.applyBindingsToNode(link,{ 
         text: value, 
         hidden: value.isEditing, 
         click: function(){ 
          value.isEditing(true); 
         } 
        }); 

     ko.applyBindingsToNode(input,{ 
      value: value, 
      visible: value.isEditing, 
          hasfocus: value.isEditing 
     }); 
    } 
}; 

視圖模型

var vm = { 
    name: ko.observable() 
} 

的HTML

<div data-bind="clickToEdit: name"></div> 

工作小提琴:http://jsfiddle.net/8Qamd/

一切歸功於瑞恩·尼邁耶。

+0

Anzeo,感謝您花時間編寫解決方案。這不完全是我需要的,但給了我一個關於需要做什麼的理想。我不需要進行編輯,因爲我需要編輯的數據量遠不止一個可觀察的數據量,但我會考慮編寫一個自定義綁定來實現這一點。再次感謝這個例子! – solefald

+0

@solefald,不客氣。很高興我能幫上忙! – thomaux