我有一个奇怪的问题,只要我用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();
}
});
单独选择每个单独工作正常并填充子插座,但当我刷新它时,它会变成空白。
可能导致问题的任何想法?
答案 0 :(得分:1)
我可以看到两个可能的问题。
首先,您的网址在findAll
和findBy
之间有所不同。这是故意的吗?
第二个是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