2012-07-13 29 views
1

當我試圖讓foo.Id的Click事件中的價值 - 在我(removeAFoo> removeFoo)獲得功能文本「函數B(){如果(0 ... 」有什麼需要改變,以獲得foo.Id的屬性值?另一個奇怪的事情是,當我在viewModel.foos陣列調用的indexOf()返回即使該陣列說,這是該指數爲零長度。不能得到淘汰賽對象的屬性值

function getFoos() { 
    viewModel.foos([]); 
    var data = [{ 
     Id: 1, 
     Name: 'Joe' }, 
    { 
     Id: 2, 
     Name: 'Jon' }, 
    { 
     Id: 3, 
     Name: 'Jim' }   
    ] 

    for (var i = 0; i < data.length; i++) { 
     var f = new foo(); 
     f.Id(data[i].Id); 
     f.Name(data[i].Name); 

     viewModel.foos.push(f); 
    } 
}; 

var viewModel = { 
    foos: ko.observableArray([]), 

    reloadFoos: function() { 
     getFoos(); 
    }, 

    removeAFoo: function(foo) { 
     removeFoo(foo); 
    } 
}; 

var foo = function() { 
    this.Id = ko.observable(); 
    this.Name = ko.observable(); 
}; 

function removeFoo(foo) { 
    alert(viewModel.foos.indexOf(foo)); 
    alert(foo.Id); 
    viewModel.foos.splice(viewModel.foos.indexOf(foo), 1); 
} 

ko.applyBindings(viewModel); 

getFoos(); 
​ 

<div data-bind="foreach: foos"> 
    <div style="float: left"> 
     <button data-bind="click : $parent.removeAFoo, attr: { id: Id }"> 
     </button> 
     <label data-bind="text: Name"> 
     </label> 
    </div> 
</div>​ 

http://jsfiddle.net/suedeuno/gAUgV/12/

回答

6

要獲得foo.id你需要記住使用括號中的數值:

像這樣:

document.write(foo.Id());

+0

謝謝,我完全錯過了。 – Suedeuno 2012-07-13 17:58:09

+0

4天玩Knockout.js,我只是意識到,需要parentheseis! – LKallipo 2013-04-26 10:08:20