2013-03-22 77 views
2

我想了解如何使用Backbone創建對象和方法。我開始是這樣的:在Backbone/Javascript中理解「this」

Person = (function() { 
    return Backbone.Model.extend({ 
    defaults: { 
     name: 'jon' 
    }, 

    changeName: function (newName) { 
    console.log(newName); 
     this.name = newName; 
    } 
    }); 

})(); 


var p1 = new Person(); 
console.log(p1.get('name')); 
p1.changeName("samanatha"); 
console.log(p1.get('name')); 

我不明白的是,爲什麼不是我p1.name性質的變化。我認爲這與這個名字中的「this」有關,因爲我仍然試圖理解「this」是如何工作的,但是我認爲我錯過了其他的東西,因爲this.name = newNamename=newName都不起作用。謝謝!

回答

5

name包含在您的型號的屬性中:p1.attributes.name。這就是爲什麼你使用get()來訪問它。如果你想改變name,您可以執行下列操作之一:

p1.set("name", "samantha") 

p1.set({"name": "samantha"}) 

通過傳遞對象,後者允許您一次設置多個屬性。

按照docs

Please use set to update the attributes instead of modifying them directly. 

這讓骨幹可以做這樣的事情觸發,當您更改屬性,或當你調用toJSON()提供的屬性的序列化版本change事件。

0
... 
changeName: function (newName) { 
console.log(newName); 
    this.name = newName; 
} 
... 

應該

... 
changeName: function (newName) { 
console.log(newName); 
    this.set ({'name': newName}); 
} 
... 

http://backbonejs.org/#Model-set