3

成功UserするたびsignInにモデルを更新したいと思います。これには、以前のモデルには存在しなかったバックエンドによる割り当てが含まれます。id

MyApp.module("User", function(User, App, Backbone, Marionette, $, _) {

  User.Controller = Backbone.Marionette.Controller.extend({

    initialize: function() {
      this.model = new MyApp.User.Model();
    },

    signIn: function(credentials) {
      var signInData = { user: credentials };
      var self = this;

      App.session.signIn(signInData, {
        success: function(model, response, options) {
          self.updateUserModel(model);
        },
        error: function(model, xhr, options) {}
      });
    },

    updateUserModel: function(model) {
      // TODO Update all attributes, including new onces e.g. id.
    }

  });
});

一度にすべての属性をどのように更新しますか? すべての属性を手動でできることはわかっていsetますが、属性のリストは時間の経過とともに変化する可能性があるため、これは間違っているようです。一般的に、私はモデルでそのようなメソッド
を期待します。update(model)User


nikoshrjohn-4d5で提案されているバックボーンのmodel.set()方法を使用すると...

    signIn: function(credentials) {
      var signInData = { user: credentials };
      var self = this;

      App.session.signIn(signInData, {
        success: function(model, response, options) {
          self.model.set(model);
        },
        error: function(model, xhr, options) {}
      });
    },

...id属性はコピーされますがthis.model、 などの他のプロパティがありませんname

コールバックで返されるモデルはsuccess次のようになります。

_changing: false
_pending: false
_previousAttributes: Object
attributes: Object
    bind: function (name, callback, context) {
    close: function (){
    constructor: function (){ return parent.apply(this, arguments); }
    created_at: "2013-07-22T19:03:24Z"
    email: "user@example.com"
    id: 3
    initialize: function () {
    listenTo: function (obj, name, callback) {
    listenToOnce: function (obj, name, callback) {
    logout: function () {
    model: child
    name: "Some User"
    off: function (name, callback, context) {
    on: function (name, callback, context) {
    once: function (name, callback, context) {
    options: Object
    signIn: function (credentials) {
    signUp: function (credentials) {
    stopListening: function (obj, name, callback) {
    trigger: function (name) {
    triggerMethod: function (event) {
    unbind: function (name, callback, context) {
    updated_at: "2013-08-05T13:20:43Z"
    user: Object
    __proto__: Object
    changed: Object
cid: "c3"
id: 3
__proto__: Surrogate
4

3 に答える 3

13
  • あなたは周りを移動していますBackbone.Model
  • Model.set属性のハッシュを受け入れ、
  • Backbone.Modelを属性のハッシュに変換できますModel.toJSON

コールバックを次のように書くことができます

success: function(model, response, options) {
    self.model.set(model.toJSON());
}
于 2013-08-05T13:38:15.930 に答える
2

単純に を使用setして、他のモデルのattributesプロパティ値 (すべての属性値を持つオブジェクト) を引数として指定できます。

self.model.set(model.attributes);

于 2015-02-01T14:47:22.670 に答える