![](/img/trans.png)
[英]Calling custom method on add event of collection in Backbone.Marionette
[英]add a custom method to a backbone model calling server, returning a simple data type
尋找關於使用骨干在模型(“foo”)上正確實現自定義邏輯的一些指導。
我們有一般要求避免直接調用.ajax調用(見下文),並嘗試通過Backbone.js MV *框架一致地執行所有操作。
我已經在視圖上實現了一個方法(因為沒有更好的位置),但我覺得這個實用方法最適合作為模型的方法。 我讀過一些文章,建議實現覆蓋骨干.sync方法來在模型上添加自定義方法,但問題是,當模型期待一個對象時,我不確定它是“正確的” ,我實際調用的REST服務方法返回一個簡單的布爾值(true / false)。
這是我實現的代碼:
var myView = Backbone.View.extend({
initialize: function (options) {
...
},
canDelete: function (parmOne, parmTWo){
var okToDelete;
var url = '/url/to/check/if/delete/is/ok/parmOne/ParmTwo';
$.ajax({
async: false,
type: "GET",
url: url,
success: function (valBool, response, jqXHR) {
okToDelete = valBool;
},
error: function (data, textStatus, jqXHR) {
notifyError(data.responseText)
}
});
return okToDelete;
}
});
尋找有關實施的建議,以使其更清潔?
謝謝
你是不是要覆蓋Backbone.sync
。 根據文檔 :
默認情況下,它使用jQuery.ajax發出RESTful JSON請求並返回jqXHR。 您可以覆蓋它以使用不同的持久性策略,例如WebSockets,XML傳輸或本地存儲。
如果要定義不同的持久性策略,則覆蓋sync
。
Model-specific
於模型的實用程序功能屬於模型 對於像你這樣的實用功能,實現它的正確位置將在model
。
var myModel = Backbone.Model.extend({
canDelete: function (parmOne, parmTWo){
var url = '/url/to/check/if/delete/is/ok/parmOne/ParmTwo';
return $.ajax({
async: false,
type: "GET",
url: url
});
}
});
在您的視圖中,您可能甚至綁定了刪除功能,例如deleteModel
。 由於我們連接了model.canDelete
方法以返回$.ajax
promise,我們可以在視圖中執行錯誤檢查,如下所示:
var myView = = Backbone.View.extend({
initialize: function (options) {
...
},
deleteModel: function(event) {
var that = this;
this.model.canDelete()
.done(function (data) {
// Do some stuff if ok to delete like:
that.model.destroy();
})
.fail(function (data) {
// Do some stuff if not ok to delete like:
that.model.notifyError(data.responseText)
});
}
});
當然,如果模型只是以非常有限的方式使用,你可以保留你的成功/失敗回調。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.