2013-02-22 110 views
0

問題:在創建對象的附加實例並將其添加到數組後,數組中對象的所有實例都成爲最後添加的對象(我相信我總是創建儘管我不想嘗試單身)。實例化對象的多個實例並推送到ko.observableArray

例子:

var people = ko.observableArray([]); 

var Bob = new Person('Bob','supervisor'); 
var Tina = new Person('Tina','sales lead'); 

people.push(Bob); 
people.push(Tina); 

//Both "persons" in "people" will be "Tina" and "Bob" is nowhere 

這裏是Person對象(在CoffeeScript中)

define (require) => 
    class Person 
     constructor: (name, title)-> 
      @name name 
      @title title 

     name: ko.observable() 
     title: ko.observable() 

創建這樣的輸出:

var _this = this; 

define(function(require) { 
    var Person; 
    return Person = (function() { 

    function Person(name, title) { 
     this.name(name); 
     this.title(title); 
    } 

    Person.prototype.name = ko.observable(); 

    Person.prototype.title = ko.observable(); 

    return Person; 

    })(); 
}); 
+0

我不認爲這與CoffeeScript有什麼關係。我懷疑你沒有正確使用knockout.js。這在普通的'CoffeeScript:http://jsfiddle.net/Xugxx/中可以正常工作。 – 2013-02-22 23:35:00

+0

你是對的Alex,我明白了。我需要挖掘Knockout ObservableArray,看看這是不是罪魁禍首。謝謝。 – RyanKeeter 2013-02-22 23:41:43

+0

當我將「名稱」和「標題」更改爲正常變量而不是「可觀察」時,這一切都可以正常工作。很有意思。 – RyanKeeter 2013-02-22 23:46:04

回答

4

的問題是,你正在做nametitle類級屬性,不在實例級別。所以你實際上每個Person實例共享相同的名稱和標題observables。

要創建實例屬性,您需要在其中設置構造函數。

class Person 
    constructor: (name, title) -> 
     @name = ko.observable name 
     @title = ko.observable title