2

ビューの「signIn」関数を使用して、ユーザー モデルにデータを設定しようとしています。

initialize: function() {
    console.log('Sign in view initialized');
    this.render();

    this.userModel = new UserModel();
    this.collection = new UserCollection();
},

signIn: function(e) {
    e.preventDefault();

    var self = this;

    $.ajax({
        type: 'POST',
        url: 'http://localhost/app/api/User.php',
        dataType: "json",
        data: $.param({
            req: "REQUSERSIGNIN",
            platform: "WEB",
            useremail: $('#userSignIn #userEmail').val(),
            userpass: $('#userSignIn #userPassword').val()
        }),
        success: function(response) {

            self.userModel.set({
                handle: response.HANDLE,
                email: response.EMAIL,
                uuid: response.UUIDUSER,
                userpic: response.USERPIC,
                tokenlogin: response.TOKENLOGIN
            });

            console.log(self.userModel.get("tokenlogin"));
        }
    });
},

.fetch() または .save() が物事を行うバックボーンの方法であることを読みましたが、フェッチを使用するときに UserModel を設定できないようです。ただし、jQuery.ajax() の方法で行うと、希望どおりに機能します。

$.ajax() で実行するか、.fetch などを介して実行するかの違いを誰かが説明してくれますか?

編集:

ここに私のモデルコードがあります

var UserModel = Backbone.Model.extend({
    defaults: {
        handle: '',
        email: '',
        uuid: '',
        userpic: '',
        tokenlogin: ''
    },
});
4

1 に答える 1

2

fetchモデルのメソッドをオーバーライドすることで、これを実行できるはずです。

UserModel = Backbone.model.extend({
  defaults: {
    // ....
  },

  // set url for model (assumes app root is http://localhost/app)
  url: '/api/User.php',

  // pass custom parameters on fetch
  fetch: function (options) {
    var options = _.clone(options);

    // set our custom parameters
    options.req = "REQUSERSIGNIN";
    options.platform = "WEB";
    options.useremail = $('#userSignIn #userEmail').val();
    options.userpass = $('#userSignIn #userPassword').val();

    // call the Backbone method, which in turn calls $.ajax
    Backbone.sync.apply(this, options);
  },
});

モデルの Parse メソッドは、サーバーからの応答を適切に処理する必要があります。これは、1 対 1 のように見えるためです (response.handle は model.attributes.handle と一致します)。実際の応答を見ないと、それを知るのは少し難しいです。

于 2013-09-18T21:52:16.483 に答える