2011-11-07 31 views
0

我試圖通過單擊來修改對象。這是我的。如何修改點擊對象

<form> 
    <ul class="tabs" data-tabs="tabs" data-bind="template: 'lineTemplate'"></ul> 

    <div class="pill-content" data-bind="template: 'lineDivTemplate'" ></div> 
</form> 

<script id="lineTemplate" type="text/html"> 
    {{each(i, line) lines()}} 
    <li><a data-bind="click: function() { viewModel.setActive(line) }, attr : { href : '#line' + id() }"><span style="font-size: 15px;" data-bind="text : model"/></a></li> 
    {{/each}} 
</script> 


var viewModel = {  
    lines: ko.observableArray([]), 
    setActive : function(line) {     
     **//I need to modify this object** 

     line.activeTab = true; 
    } 
}; 

$.getJSON("/json/all/lines", { customer_id : customer_id } , function(data) {  

    ko.mapping.fromJS(data, null, viewModel.lines);  
}); 

ko.applyBindings(viewModel); 

基本上當用戶點擊選項卡時,我需要它來更新模型(最終是數據庫),它是當前活動的選項卡。我的第一個方法是刪除對象修改它,然後將其推回到數組,但推動將它添加到數組的末尾,這是我不想要的。謝謝你的幫助。

回答

1

通常情況下,您會保留類似「selectedTab」或「activeTab」可觀察的內容。

var viewModel = { 
    lines: ko.observableArray([]), 
    activeTab: ko.observable(), 
}; 

viewModel.setActive = function(line) { 
    this.activeTab(line); 
}.bind(viewModel); 

然後,你可以做任何約束力,你要對activeTab。在KO 1.3,你可以這樣做:

<div data-bind="with: activeTab"> 
    ...add some bindings here 
</div> 

在此之前,你可以這樣做:

<script id="activeTmpl"> 
    ...add your bindings here 
</script> 
+0

這工作不錯,但我正在尋找的東西要簡單得多。我想要做的就是修改observableArray中的一個屬性。當我將信息寫入數據庫時​​,如果我的屬性已經存在於對象中,這會更容易。你有它的方式,我將不得不串行化一個完全不同的對象,獲得該ID然後將其作爲單獨的POST傳遞並更新它。謝謝。 –

+0

這種情況下的'activeTab'只是對observableArray中同一個'line'對象的引用。所以,這不會是一個完全不同的對象。 –