gpt4 book ai didi

javascript - 获取对象 # 在 Ember 中没有方法 'map'
转载 作者:行者123 更新时间:2023-11-29 10:46:23 26 4
gpt4 key购买 nike

我有一个这样的 App.js,

App = Ember.Application.create();

App.Model = Ember.Object.extend({

});

App.IndexRoute = Ember.Route.extend({
redirect : function() {
this.transitionTo('users');
}
});

App.UsersController = Ember.ObjectController.extend({

filteredContent : function() {
var searchText = this.get('searchText'), regex = new RegExp(searchText, 'i');

return this.get('model').filter(function(item) {
return regex.test(item.name);
});
}.property('searchText', 'model')

});

App.User = App.Model.extend({
id : null,
firstname : null,
email : null
});

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

App.UserRoute = Ember.Route.extend({
model : function(params) {
//var everyone = this.controllerFor('users');
return App.User.findBy('id', params.user_id);
}
});


App.User.reopenClass({
findAll : function() {
return $.getJSON("http://pioneerdev.us/users/index", function(data) {
return data.map(function(row) {
return App.User.create(row);
});
});
}
});


App.Router.map(function() {
this.resource('users', function() {
this.resource('user',{path: '/:user_id'});
});
});

HTML,

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

{{input type="text" value=searchText}}

{{#each item in filteredContent }}
<tr><td>
{{#link-to 'user' item}} <p>{{item.firstname}}</p>{{/link-to}}
</td></tr>
{{/each}}

{{outlet}}
</script>


<script type="text/x-handlebars" data-template-name="user">
<h2>
{{email}}
</h2>

</script>

我在 Chrome 上遇到这样的错误,

Uncaught TypeError: Object #<Object> has no method 'map' 

Firefox 给我,TypeError: data.map is not a function

这是 JSON 的示例,

{"users":[{"id":"1","firstname":"Marilyn","lastname":"Hughes","address":"4 Johnson Alley","state":"Utah","country":"US","email":"lfreeman@skyvu.info","phone":"6471228888","experience":"5","designation":"Writer"},{"id":"2","firstname":"John","lastname":"Porter","address":"86228 Commercial Court","state":"Pennsylvania","country":"US","email":"jporter@zoomdog.net","phone":"9018889877","experience":"3","designation":"Design"},{"id":"3","firstname":"Frances","lastname":"Johnson","address":"489 Summit Lane","state":"Minnesota","country":"US","email":"fjohnson@teklist.net","phone":null,"experience":"2","designation":"Script"}]}

可能是什么问题?我很确定这是 .getJSON 的问题。

我应该使用 data.users.map 吗?而不是 data.map ?但是当我使用它时,我在这一行出现错误,

return this.get('model').filter(function(item) {

说,

Uncaught TypeError: Object #<Object> has no method 'filter'

最佳答案

是的,您需要使用 data.users.map ,因为您在 Controller 的模型属性中期望元素数组。

Uncaught TypeError: Object #<Object> has no method 'filter'错误是因为,this.get('model')data没有data.users .所以Object类没有名为 filter 的方法,只有 Array .该数据是从 $.getJSON().then() 返回的解析数据的方法:

$.getJSON().then(function(data) {
// something like this is made by ember
// controller.set('model', data);
});

并且您需要 data.users 作为 ember 对象。

所以我将您的代码更新为以下内容:

App.User.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.User.create(row);
});
// here we resolve the array with ember objects
// so you will have this.get('model') filled with array of users
resolve(result);
}).fail(reject);
});
}
});

最好使用 RSVP.Promise因为这是 ember 使用的 promises api。

这是显示此工作的 fiddle http://jsfiddle.net/marciojunior/HtJEh/

关于javascript - 获取对象 #<Object> 在 Ember 中没有方法 'map',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18689681/

26 4 0