Является ли backbone.js моделью представлением экземпляра?

Это общий вопрос о backbone.js и javascript, я промежуточный в javascript:

Если у вас есть коллекция моделей, каждая из которых связана с экземпляром представления, является ли каждый экземпляр экземпляра экземпляра экземпляра, содержащего полный экземпляр метода визуализации представления? Если да, то каким образом рекомендуется, чтобы метод визуализации был "статическим", чтобы память не терялась впустую, если каждый экземпляр модели требует одинаковой функции рендеринга?

В приведенном ниже примере каждый экземпляр шляпы также содержит экземпляр функции визуализации или указывает на "статическую" функцию рендеринга?

var Hat = Backbone.Model.extend({});
 var HatCollection = Backbone.Collection.extend({
 model : Hat, 
 });
 var HatView = Backbone.View.extend({
 render : function() {
 // output the hat html
 }
 });
 var hats = new HatCollection([ new Hat(), new Hat(), new Hat()])
 hats.each(function(hat) {
 hat.view = new HatView({ model : hat });
 });
2 ответа

Просто проверьте, является ли метод render членом экземпляра или прототипа:

(function () {
 var HatView = Backbone.View.extend({
 render : function() {
 console.log("rendering a hat...");
 }
 });
 var hview = new HatView();
 console.log(hview.hasOwnProperty("render")); // false
 console.log(hview.render === HatView.prototype.render); // true
}());


В Javascript нет реальных "статических" или "классных" методов. У вас есть метод, определенный на прототипе класса.

Когда вы используете Backbone.View.extend(), все, что вы передаете, добавляется к прототипу, поэтому они действительно являются тем, что вы назвали бы "статическими" методами.

licensed under cc by-sa 3.0 with attribution.