代码之家  ›  专栏  ›  技术社区  ›  Safari

内部骨干网模型方法及其服务器更新

  •  -1
  • Safari  · 技术社区  · 7 年前

    我有一个名为“项目”的简单主干模型。

    我想添加一个方法。打开

    这个方法将调用一个REST api,它将更改一些属性(我收到新的json)。

    是否有方法根据响应更新当前模型?这种方法正确吗?

    var project = Backbone.Model.extend({ ...
    
    open: function() {
    ... // request to the server  and update the current object... //
    }
    
    ...
    }
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Grafpaper10    7 年前

    主干网。模型已具有 fetch function . 这可以使REST调用“获取”数据,成功时将自动更新模型的属性。这个 取来 函数需要 url ,可以为每个调用传入或在模型上定义。参见下面的示例。

    取来 会有额外的好处。例子: from fetch docs

    如果服务器的状态与当前属性不同,则触发“更改”事件。

    这意味着您可以根据需要将侦听器添加到此模型的事件中。一种常见的模式是在“更新”模型时重新呈现视图。

    另外, 取来 将自动通过 model's parse function ,如果您希望模型上的数据结构与REST调用中的数据结构不同,则此方法非常有用。

    例子:

    var Project = Backbone.Model.extend({
      url: 'my-url/to-rest-call', // defined on model
      parse: function(resp) {
        // by default, returns resp only
        // Doing this sets model attributes to resp.data object
        return resp.data;
      }
    });
    var project = new Project();
    // runs myView's render function if updated
    myView.listenTo(project, 'update', myView.render);
    
    // now fetch using url defined on model
    project.fetch();
    // OR passed with call
    project.fetch({
      url: 'my-other-url/to-rest-call'
    });
    
        2
  •  0
  •   T J    7 年前

    这个方法将调用一个REST api,它将更改一些属性(我收到新的json)。

    如果要更新模型属性,应使用 model.save() .

    是否有方法根据响应更新当前模型?

    model.save() 将自动用返回的响应更新模型。