1

これは簡単な質問ですが、私が望むものを達成するための最良の方法を理解することはできません. シナリオは次のとおりです。

App.Router = Ember.Router.extend({
root: Ember.Route.extend({
    home: Ember.Route.extend({
        route: '/',
        connectOutlets: function(router) {
            router.get('applicationController').connectOutlet('home');
            router.get('homeController').connectOutlet('menu', 'menu', App.Channels.find());
            router.get('homeController').connectOutlet('video_overview', 'videoOverview', App.Featured.find());
        }
    })
})

App.Featured = Ember.Object.extend();

App.Featured.reopenClass({
find: function() {
    setRequestUrl('featured');
    establishSecureConnection();
    $.ajaxQueue({
        type: "GET",
        url: connect.url,
        data: "",
        dataType: 'jsonp',
        jsonp: false,
        jsonpCallback: "fjsonp",
        cache: true,
        context: this,
        success: function(response){
            this.findOne(response[0].mediaId); // get the first featured object and retrieve details
            //
            console.log('Featured Video:');
            console.log(response);
        }
    });
},
findOne: function(item) {
    var featuredVideo = App.Featured.create({});
    setRequestUrl('media/'+item);
    establishSecureConnection();
    $.ajaxQueue({
        type: "GET",
        url: connect.url,
        data: "",
        dataType: 'jsonp',
        jsonp: false,
        jsonpCallback: "fjsonp",
        cache: true,
        context: featuredVideo,
        success: function(response){
            this.setProperties(response);
            //
            console.log('Featured Video details:');
            console.log(response);
        }
    });
    return featuredVideo;
}

そのため、アプリを実行しRouter、アウトレットvideo_overviewから取得したコンテンツに接続するApp.Featured.find()と、ブラウザー ログで応答を確認できますが、値がテンプレートに到達しません。

私が行っている「ダブル」リクエストApp.Featured(最初にfind()、次にfindOne())に関連していると思うので、returnで値を返すときにfeaturedVideo通知されません。

お時間をいただきありがとうございます。

4

2 に答える 2

1

こんにちは、皆さん、ついにいじって、sly7_7 のアドバイスを受けて作業を開始しました。

これは私が達成した方法ですが、誰かが Ember の動作を詳細に説明できれば幸いです。

App.Featured = Ember.Object.extend();
App.Featured.reopenClass({
find: function(singleItem) {
    if (singleItem){
        console.log('Returning the single item...');
        console.log(singleItem);
        //
        featuredContent.setProperties(singleItem);
    } else {
        setRequestUrl('featured');
        establishSecureConnection();
        $.ajaxQueue({
            type: "GET",
            url: connect.url,
            data: "",
            dataType: 'jsonp',
            jsonp: false,
            jsonpCallback: "fjsonp",
            cache: true,
            context: featuredContent,
            success: function(response){
                this.setProperties(App.Featured.findOne(response[0].mediaId)); // this.setProperties({'category':'hey arrives here success'});
                //
                console.log('Featured Video:');
                console.log(response);
            }
        });
    }
    return featuredContent;
},
findOne: function(item) {
    setRequestUrl('media/'+item);
    establishSecureConnection();
    $.ajaxQueue({
        type: "GET",
        url: connect.url,
        data: "",
        dataType: 'jsonp',
        jsonp: false,
        jsonpCallback: "fjsonp",
        cache: true,
        context: this,
        success: function(response){
            console.log('Featured Video content:');
            console.log(response);
            //
            this.find(response);
        }
    });
}

});

var featuredContent = App.Featured.create({});

次に、テンプレートは、注目のコンテンツ オブジェクトに加えられた変更を受け取ります。

于 2012-10-23T10:18:58.193 に答える
1

App.Featured.find何かを返すようです。findOne の結果を返す必要があると思いますね。

于 2012-10-22T21:01:26.790 に答える