2012-05-10 3 views
0

Давайте предположим, что у меня есть разные точки зрения, каждый из них с DOM событий, относящихся к элементу events: { "dblclick div.editable": "edit" }
Я хочу, чтобы разделить функцию edit (а затем и сохранить) между различными видами.Доля же действия/функции между различными видами

var View1 = Backbone.View.extend({ 

    events: { "dblclick div.editable": "edit" }, 

    edit: function() {} // function I would like to share btw diff views 
}); 

var View2 = Backbone.View.extend({ 

    events: { "dblclick div.editable": "edit" }, 

    edit: function() {} // function I would like to share btw diff views 
}); 

Будет возможно?
Каков наилучший подход?
Есть ли примеры?

ответ

1

Даже я думаю, что @IntoTheVoid изящнее я хотел выставить очень простой подход: модуль Utils:

var App = function(){}; 

App.Utils = { 
    myCommonFunction: function(param){ 
    // code 
    } 
} 

var View1 = Backbone.View.extend({ 
    events: { "dblclick div.editable": "edit" }, 
    edit: function() { 
     App.Utils.myCommonFunction("param"); 
    } 
}); 

var View2 = Backbone.View.extend({ 
    events: { "dblclick div.editable": "edit" }, 
    edit: function() { 
     App.Utils.myCommonFunction("param"); 
    } 
}); 
2

На Backbone patterns site описано, как использовать Примеси решить этот случай проблемы дизайна:

Проблема: Иногда вы иметь такую ​​же функциональность для нескольких объектов, и это не имеет смысла для обертывания ваших объектов в родительском объекте . Например, если у вас есть два представления, которые совместно используют методы, но не имеют и не должны иметь общий родительский вид.

Решение: Для этого сценария целесообразно использовать mixin.

Так что в данном случае это может быть что-то вроде этого:

App.Mixins.Editable = { 
    edit: function() { /* ... */ }, 

    open: function() { /*... */ }, 

    close: function() { /* ... */ } 
}; 

App.Views.YourEditPage = Backbone.View.extend(
    _.extend({}, App.Mixins.Editable, { 

    events: { "dblclick div.editable": "edit" }, 

    // (Methods and attributes here) 

})); 
Смежные вопросы