当我从Emberjs中的{{link-to}}刷新ID时,子插座变空了

时间:2013-09-15 01:22:42

标签: javascript ajax ember.js

我有一个奇怪的问题,只要我用id刷新页面,子插座就会变空。我有一个由{{link-to}}助手生成的列表。

<script type="text/x-handlebars" id="twod">
        <div class="row">
            <div class="span4">
                <img src="/img/2DPipeline.jpg" />
            </div>

            <div class="span3">
                <h4>People with Roles</h4>
             <div class="row">
                 <div class="span2">    
                        <ul>
                            {{#each item in model}}
                <li>{{#link-to 'twoduser' item}}{{item.firstname}} {{/link-to}}</li>
                            {{/each}}

                        </ul>
                    </div>
                    <div class="row">
                        <div class="span">
                            {{outlet}}
                        </div>
                    </div>
                </div>
        </div>
        </script>

这是twoduser模板,

<script type="text/x-handlebars" data-template-name="twoduser">

        <div class="row">
            <div class="span3">
              Full Name: {{firstname}}{{lastname}}
              EMail: {{email}}
            </div>
        </div>

        </script>

App.js,

    App.Router.map(function() {
        this.resource('twod', function() {
            this.resource('twoduser', {
                path : ':user_id'
            });
        });
        this.resource('threed');

    });
App.TwoduserRoute = Ember.Route.extend({
    model : function(params) {
        return App.Twod.findBy(params.user_id);
    }
});

App.Twod.reopenClass({
    findAll : function() {
        return new Ember.RSVP.Promise(function(resolve, reject) {
            $.getJSON("http://pioneerdev.us/users/index", function(data) {
                var result = data.users.map(function(row) {
                    return App.Twod.create(row);
                });
                resolve(result);
            }).fail(reject);
        });
    },
    findBy : function(user_id) {
        var user = App.Twod.create();

        $.getJSON("http://ankur.local/users/byId/" + user_id, function(data) {
            user.setProperties(data.user);
        });
        user.set("user_id", user_id);
        return user;
    }
});

App.TwodRoute = Ember.Route.extend({
    model : function() {
        return App.Twod.findAll();
    }
});

单独选择每个单独工作正常并填充子插座,但当我刷新它时,它会变成空白。

可能导致问题的任何想法?

1 个答案:

答案 0 :(得分:1)

我可以看到两个可能的问题。

首先,您的网址在findAllfindBy之间有所不同。这是故意的吗?

第二个是findAll返回Ember承诺(Ember.RSVP.Promise),但findBy没有。

[更新]:基于评论中的JSBin:http://jsbin.com/iPUxuJU/1/

这里的问题是API端点在user响应中返回一个数组。它目前看起来像这样:

{user : [{ ... }] }

理想情况下,它看起来像这样:

{user : {....} }

您可以更改API端点,也可以更新代码以从该数组中提取第一个元素。而不是:

user.setProperties(data.user);

你可以这样做:

user.setProperties(data.user[0]);

这是一个改变的JSBin:http://jsbin.com/oquBoMA/1#/twod/2