从动作设置模型并在ember js中重新加载模板

时间:2014-05-13 10:56:49

标签: javascript jquery ember.js jsonp

我已从另一个动作控制器重定向到一个控制器。 this.get('controllers.searchResult').send('searchDoc', query);

这里我使用AJAX请求获取数组对象

App.SearchResultController = Ember.ArrayController.extend({

serverURL: 'someURL',

actions: {
    searchDoc: function(query) {

        $.ajax({
            type: "GET",
            url: serverURL + request,
            data : 'q=' + query,
            dataType : "JSON",
            context : this, // to increase the scope of 
            statusCode : {
                200 : function(response) {

                    var docs = [];
                    response.docs.forEach(function(doc) {
                        docs.push(App.Doc.create(doc));
                    });

                    // do something here so that
                    // docs get save in the model
                    // and result page get reload
                },
                400 : function() {
                    console.log('status 400 something went wrong');
                }
            }
        });
    }
}
});

我是Ember JS的新手。我愿意在模型中存储/保存/添加此docs对象并重新加载我的路由searchResult

1 个答案:

答案 0 :(得分:2)

您应该保留对控制器的引用,并在获得结果时使用它来设置content

示例:

App.SearchResultController = Ember.ArrayController.extend({
serverURL: 'someURL',

actions: {
    searchDoc: function(query) {
        var self = this; // keep a reference to the controller

        $.ajax({
            type: "GET",
            url: serverURL + request,
            data : 'q=' + query,
            dataType : "JSON",
            statusCode : {
                200 : function(response) {

                    var docs = Ember.A();
                    response.docs.forEach(function(doc) {
                        docs.pushObject(App.Doc.create(doc));
                    });

                    self.set('content', docs); // use the controller reference to set the content
                },
                400 : function() {
                    console.log('status 400 something went wrong');
                }
            }
        });
    }
}
});

我还在示例中添加了Ember数组的用法。 设置content会触发您的视图更新。

您可以使用以下内容转换为searchResult:

this.get('controllers.searchResult').send('searchDoc', query);
this.transitionToRoute('searchResult');