1

私はバックボーン Web アプリケーションを開発しており、ビューからデータを投稿する方法を知りたいです
これは私のモデルです:

App.Models.edit = Backbone.Model.extend({
    defaults : {
        id    : undefined,
        fname : undefined,
        lname : undefined,
        phone : undefined,
        address : undefined,
        email : undefined,
        url: undefined,
    },

    initialize: function(){
        this.set({url : '../api/getOne/' + App.CurrentID });
    },

    getAttrs: function(attr){
        return this.get(attr);
    }
    });

そして、これは私の見解です:

App.Views.edit = Backbone.View.extend({
    el: $("#modal"),

    initialize: function(){
        App.TplNames.edit = $('body');
        App.Tpls.edit('edit');
        this.model.bind("reset", this.render, this);
        this.render();
    },

    events: {
        'click .btnSave': 'saveDetails',
    },

    saveDetails: function(){
        this.model.save();
        //console.log(this.model);
    },

    render: function(){
        var elem = '';
        $.each(this.model.models, function(i, k){
        var template = _.template( $('#tpl_edit').html(), k.toJSON() );
        elem += template;
        });
        $(this.el).html(elem);
        $("#myModal").modal('show');
        $("#myModal").on('hidden', function(){
        //alert(123);
        document.location.href = App.Url + '#view';
        });
        var attrs = "";
        $.each(this.model.models, function(i, k){
        attrs = k.toJSON();
        });
        $("#fname").val(attrs.fname);
        $("#lname").val(attrs.lname);
        $("#Email").val(attrs.email);
        $("#Phone").val(attrs.phone);
        $("#Address").val(attrs.address);
        //console.log(attrs);
    }
    });

そして、それは私のルーターです

App.Router = Backbone.Router.extend({
    routes: {
        ""      :   "def",
        "home"  :   "def",
        "view"  :   "getAll",
        "edit/:id"  :   "edit",
        "add"   :   "addContact",
    },

    def: function(){
        this.mainModel = new App.Collections.Main();
        this.mainView  = new App.Views.Main({model: this.mainModel});
        //this.mainModel.fetch();
    },

    edit: function(id){
        App.CurrentID = id;
        var contactCollObj = new App.Collections.edit();
        viewObj = new App.Views.edit({model: contactCollObj});
        contactCollObj.fetch();
        viewObj.render();
        //console.log(contactCollObj);
    },

    getAll: function(){
        //alert(123);
        var collObj = new App.Collections.View();
        var viewObj = new App.Views.View({model: collObj});
        collObj.fetch();
    },

    addContact: function(){
        //var model = new App.Collections.AddContact();
        model = new App.Models.AddContact();
        var view = new App.Views.AddContact({model: model});
        //view.render();
    }


    });

var app = 新しい App.Router(); Backbone.history.start();

モデルを保存しようとすると、エラーが発生します。

this.model.save is not a function

上記以外は大丈夫で...

4

1 に答える 1

1

ルーターでは、コレクションを渡しApp.Collections.editてモデルとして表示します。

var contactCollObj = new App.Collections.edit();
viewObj = new App.Views.edit({model: contactCollObj});

そのため、 を呼び出すことはできませんsave()save()コレクションではなく、モデルでのみ使用できます。

おそらくコレクションでビューを初期化する必要があります

viewObj = new App.Views.edit({collection: contactCollObj});

また、それに応じてビュー コードの一部を変更します。

于 2012-09-22T19:15:15.243 に答える