【发布时间】:2014-02-26 14:59:33
【问题描述】:
这个问题是emberjs display an object return from an ajax call的下面这个问题
稍微恢复一下,我为该列表的每个项目生成了一个带有一些按钮的动态列表。我用这个类捕捉到任何按钮的事件:
App.EnquiriesView = Ember.View.extend({
didInsertElement: function() {
var that = this;
this.$().on('click', '.view-btn', function(){
var id = $(this).attr('data-value');
that.get('controller').send('clickBtn', id);
});
}
});
它转到我的控制器:
App.EnquiriesController = Ember.ObjectController.extend({
actions: {
clickBtn: function( id ) {
console.log('DEBUG: ClickBtn OK id = ' + id);
//console.log(App.Enquiries.findOne(id));
this.transitionToRoute('enquiry', /*App.Enquiries.findOne(id)*/id);
}
}
});
路由器相关:
App.EnquiryRoute = Ember.Route.extend({
model: function( param ) {
console.log('Enquiry id = ' + param.enquiry_id);
return App.Enquiries.findOne(param.enquiry_id);
}
});
还有我的地图:
App.Router.map(function() {
this.resource('login', { path: '/' });
this.resource('home');
this.resource('enquiries', function (){
this.route('create');
});
this.resource('enquiry', { path: 'enquiry/:enquiry_id' }, function(){
this.route('update');
});
});
到目前为止,当用户单击按钮时,它会正确重定向到具有良好 URL 的查询(例如:/#/enquiry/1)
但问题来自我的更新课程。我刚刚创建了一个带有操作助手的按钮来显示更新表单:
App.EnquiryController = Ember.ObjectController.extend({
actions: {
update: function() {
console.log('DEBUG: in EnquiryController update');
console.log(this.get('model'));
this.transitionToRoute('enquiry.update');
}
}
});
因此,当您单击更新按钮时,您将被重定向到这种 URL:/#/enquiry/undefined/update 而不是 /#/enquiry/1/update ...
我不知道这是怎么发生的,我不知道在这个过程中我怎样才能丢失我的身份证...
感谢您的帮助。
[编辑] 如果你想知道我的 findOne 函数是什么:
findOne: function(id) {
return $.ajax({
url: host + 'mdf/enquiry/' + id,
type: 'GET',
accepts: 'application/json',
success: function (data) {
console.log('DEBUG: GET Enquiry ' + id + ' OK');
},
error: function() {
console.log('DEBUG: GET Enquiry ' + id + ' Failed');
}
});
}
在您单击列表中的相关按钮后,它会从服务器获取每个项目的数据。
这是我拿回来的东西:
Object {readyState: 1, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
abort: function ( statusText ) {
always: function () {
complete: function () {
done: function () {
error: function () {
fail: function () {
getAllResponseHeaders: function () {
getResponseHeader: function ( key ) {
overrideMimeType: function ( type ) {
pipe: function ( /* fnDone, fnFail, fnProgress */ ) {
progress: function () {
promise: function ( obj ) {
readyState: 4
responseJSON: Object
responseText: "{"ok":true,"enquiry":{"id":1,"domainid":"domain","userid":"userid","status":null,"type":"new","customerName":"Marco","customerEmail":"Marco@email.com",...}"
setRequestHeader: function ( name, value ) {
state: function () {
status: 200
statusCode: function ( map ) {
statusText: "OK"
success: function () {
then: function ( /* fnDone, fnFail, fnProgress */ ) {
__proto__: Object
【问题讨论】:
-
问题是您的模型与
enquiry_id的任何属性都不匹配。App.Enquiries.findOne(param.enquiry_id)返回什么? -
它返回与id相关的查询。如果您单击 id=1 的第一个项目,则 url 将是 /#/enquiry/1 并且 findOne 将在我的服务器上获取数据。
-
是的...但是那是什么数据?您面临的整个问题都围绕着这样一个事实,即您的模型数据的格式与您的地图预期接收的格式不同。提供作为模型返回的对象。
-
它是一个对象,其中我有一个名为: responseText: "{"ok":true,"enquiry":{"id":1,"domainid":"motorpark","userid ":"motorpark/mpuser","status":null,"type":"new","customerName":"Marco","customerEmail":"Marco@email.com","customerPhone":"0123456789", ...}}"
-
请将其添加到帖子中,而不是作为评论。不格式化真的不可读。
标签: ember.js