2011-11-07 26 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'对象的引用。所以,这不会是一个完全不同的对象。 –