0

私はbackbone.js初心者です。Railsアプリケーションにブックマークモデルがあります。テキストを入力して送信ボタンをクリックすると、新しいエントリを表示するためにページを更新する必要がないように、エントリを作成してビューに表示するテキスト フィールドを作成しようとしています。

次の Backbone.js コードを作成しました。

var BookmarksModel=Backbone.Model.extend({
    urlRoot: "/bookmarks",
})

 var enterBookmarkView = Backbone.View.extend({
        el: $("#divForBookmarks"),
        events: {
            "click #submit" : "submitBookmark"
        },
        initialize: function(){

        this.model.bind('change',this.render)
        this.render();
        },
        render: function(){
            alert("Render Called!");
            var temp = _.template( $("#enterBookmark").html(), {} );
            $(this.el).html(temp);
            return this;
        },
        submitBookmark : function(){
            var BM={
                url: $("#bookmark").val(),
                tag_list: $("#tags").val()
            }
            this.model.save(BM);
            this.render();
        }
    });

var mymodel=new BookmarksModel();
var enter_bookmark_view = new enterBookmarkView({ model: mymodel });

ただし、これにより新しいエントリが作成されますが、すぐには表示されません。新しいエントリを表示するには、ページを更新する必要があります。モデルの変更イベントでレンダリング関数を呼び出しているので、これは機能するはずですよね? また、関数 submitBookmark でそれを呼び出したので、関数が呼び出されたときに少なくとも再レンダリングされますが、それも機能しません。また、これはビューを介してモデルに新しいエントリを作成する標準的な方法ですか?

4

2 に答える 2

0

試してみたいことの 1 つは、デバッガーを使用console.log()するか、デバッガーをステップ実行して、this参照するたびに期待する値が含まれていることを確認することです。

thisどこかに予期しない値があることがわかった場合は、Underscore.js のhttp://underscorejs.org/#bindbind()を確認してください。

于 2012-12-16T14:48:33.433 に答える
0

bind イベントの後にセミコロンが抜けていると思います。また、バックボーン モデルの拡張では、オブジェクトにコンマが多すぎます。これは Internet Explorer でクラッシュします。

コードの更新は次のとおりです。

 var BookmarksModel=Backbone.Model.extend({
     urlRoot: "/bookmarks"
 })

 var enterBookmarkView = Backbone.View.extend({
        el: $("#divForBookmarks"),
        events: {
            "click #submit" : "submitBookmark"
        },
        initialize: function(){

    this.model.bind('change', this.render);
    this.render();
    },
    render: function(){
        alert("Render Called!");
        var temp = _.template( $("#enterBookmark").html(), {} );
        $(this.el).html(temp);
        return this;
    },
    submitBookmark : function(){
        var BM={
            url: $("#bookmark").val(),
            tag_list: $("#tags").val()
        }
        this.model.save(BM);
    }
});

var mymodel=new BookmarksModel();
var enter_bookmark_view = new enterBookmarkView({ model: mymodel });
于 2012-12-16T14:58:25.753 に答える