簡體   English   中英

將自定義方法添加到主干模型調用服務器,返回簡單數據類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM