5

Backbone と Laravel を使用して予約を管理する簡単なアプリケーションを作成しています。また、現在サインインしているユーザーのユーザー データを更新する簡単なフォームに取り組んでいます。

フォームからの入力データでモデルを更新するために、私が行った方法よりも効率的で効率的な方法はありますか?

モデルに update というメソッドを作成しました。このメソッドには、フォームの DOM オブジェクトが渡されます。これは最善の方法ではないと思います。

どんな助けでも大歓迎です!

var Account = Backbone.Model.extend({

    url: "/settings/account",

    initialize: function()
    {

    },

    update: function(form)
    {
        this.set({
            first_name : form.find('#first-name').val(),
            last_name : form.find('#last-name').val(),
            email : form.find('#email').val(),
            landline: form.find('#landline').val(),
            mobile: form.find('#mobile').val()
        });

        return this.save();
    }

});

var user = new Account;

var AccountView = Backbone.View.extend({

    el: $("div.section"),

    template: _.template($("#account-template").html()),

    events: {
        "submit #account": "update"
    },

    initialize: function()
    {
        _.bindAll(this, 'render', 'update');
        this.render();
    },

    render: function()
    {
        $(this.el).html(this.template(this.model.toJSON()));
    },

    update: function()
    {
        var form = $(this.el).find('form#account');

        user.update(form);

        $(this.el).find('.alert-success').show();

        return false;
    }

});

var Router = Backbone.Router.extend({

    routes: {
        "account": "account"
    },

    account: function()
    {
        user.fetch({
            success: function()
            {
                return new AccountView({model:user});
            }
        });         
    }

});
4

1 に答える 1

6

モデルがそのビューを認識している場合、それは悪い設計と見なされます。ビューによって調整されたモデルの更新を行います。

ビューでこれを行うのが最も簡単な方法だと思います:

update: function()
{
    var form = $(this.el).find('form#account');
    user.set({
        first_name : form.find('#first-name').val(),
        last_name : form.find('#last-name').val(),
        email : form.find('#email').val(),
        landline: form.find('#landline').val(),
        mobile: form.find('#mobile').val()
    });

    user.save();
    $(this.el).find('.alert-success').show();
    return false;
}

それ以外の場合、モデルは値を取得する場所を認識している必要があります。また、いつか別のビューを使用する場合は、モデル クラスも変更する必要があります。

于 2012-09-10T09:33:21.660 に答える