0

マスター ビューApp.MainView(テーブル ビュー)、App.TaskView(行ビュー) があり、バックボーン フォームを使用してレコードを追加および編集します。これが私のコードです:

App.MainView = Backbone.View.extend({
            template: $("#home-template").html(),
            initialize: function() {
                _.bindAll(this, 'render');
               this.listenTo(tasks, 'add change', this.addOne);
               this.subViews = [];


            },
addOne: function(model) {


                var view = new App.TaskView({model: model});
                this.$('tbody').append(view.render().el);
            },
render: function() {

                var template = _.template(this.template);
                this.$el.append(template);
                //this.$el.find("#filter").append(this.createSelect());
                var self = this;


                this.collection.fetch({
                    wait: true,
                    success: function(model, response) {


                        var TasksLen = model.length;

                        for (var i = 0; i < TasksLen; i++) {

                            var taskView = new App.TaskView({
                                model: model.models[i]
                            });


                            //self.subViews.push(taskView);

                            $('#record-list-table', this.el).append(taskView.render().el);

                        }
                    }

                });
  },

Now my TaskView:

 App.TaskView = Backbone.View.extend({
            tagName: 'tr',
            template: _.template($('#record-template').html()),
initialize: function() {
                var self = this;

            },
events: {

                "click .edit": "editrecord",



            },
render: function() {

                this.$el.html(this.template(this.model.toJSON()))

                return this;



            },
 editrecord: function() {

                form.setValue(this.model.toJSON());
}

and my Form and submit button 

var form = new Backbone.Form({
            model: task
        });

        window.form = form;
       $('#form').html(form.render().el);

        $('#submit-btn').click(function() {

            var data = form.getValue();
            form.commit();
             task.save(data, {wait: true,
                    success: function(task, response) {
                         tasks.add(task);

                    }


                }); 
Templates:
<script type="text/template" id="home-template">
 <table id="recordtable">
<input type='reset' id="reset-btn" onclick="reset()" class="add-new" value='' name='reset' /></table></script>


<script type="text/template" id="record-template">

    <td id="edit-name" class="edit"> <%- name %></td>
    <td class="edit date" class="edit"> <%- due_date %></td>

</script>

2 つの問題があります。

  1. モデルが変更されると、別のモデルが追加されます (ただし、プット リクエストとデータベースの更新は行われますが、フロント エンド バックボーンでは、前の行を更新する代わりにテーブルに新しい行が追加されます)。ただし、ページを更新すると、正しいデータが表示されます。変更イベントに問題があるようです。

  2. タスクへの直接ルート、つまり task/id を作成し、テーブルでそのタスクを強調表示して、フォームで編集したいと考えています。現在、フォームをクリックして任意のモデルを編集できますが、直接ルートも作成したいと考えています。

4

1 に答える 1

0

私はあなたのコードの問題を見つけたと思います。あなたがやっている

 tasks.add(task);

モデルセーブの成功方法。しかし、タスクを再レンダリングする必要があると思います。1.タスクビューで変更イベントをバインドして、更新された値でタスクをレンダリングできます。2.このようにタスクビューに関数を追加できます

refresh: function(){
     this.render();
}

そして、model.save の成功が見つかった後にこの関数を呼び出すことができます。

于 2014-01-09T19:53:47.463 に答える