这个问题是下面这个memberjs显示从ajax调用返回的对象
继续讲,我为列表中的每个项目生成了一个动态列表,其中包含一些按钮。我用这个类捕捉任何按钮的事件:
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的查询(例如:/#/inquiry/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:/#/inquiry/definned/update,而不是/#/Inquiry/1/update。。。
我不知道这是怎么发生的,也不知道我如何在这个过程中失去我的身份证。。。
谢谢你的帮助。
[edit]如果你需要知道什么是我的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
这里有很多问题。你正在做的几件事都是非常"非成员"的惯用语,如果结果出现更多问题,我也不会感到惊讶。但我会专注于所问的问题,如果你想要更多关于调整进一步细分市场的建议,我很乐意提供。
简而言之,您有以下代码:
this.resource('enquiry', { path: 'enquiry/:enquiry_id' });
在您的地图中,但一个看起来类似的查询对象:
{"ok":true,
"enquiry":{
"id":1,
"domainid":"motorpark",
"userid":"motorpark/mpuser"
...
}
}
这些不匹配。映射定义它由模型中不存在的字段enquiry_id
*序列化。要解决此问题,您可以使用以下解决方案之一:
解决方案1:调整您的模型
如果你想保持地图原样,你需要调整你的模型,使其具有enquiry_id
字段,例如:
{"ok":true,
"enquiry_id":1,
"enquiry":{
"id":1,
"domainid":"motorpark",
"userid":"motorpark/mpuser"
...
}
}
解决方案2:调整地图(推荐)
不过,更改地图更容易。要做到这一点,请将地图上的查询资源替换为:
this.resource('enquiry', {path: 'enquiry/:enquiry.id'});
.
告诉ember所需的元素是enquiry
对象内的id
字段。
您还需要修改访问param值的方式。因为您将参数的元素命名为enquiry.id
,所以在检索值时需要将其指定为变量名,而不是路径。在您的路线上,更改的所有实例
param.enquiry_id
收件人:
param['enquiry.id']