[英]How to access a model from another controller in Ember
這是一個新手問題:我正在商店中創建一個新的Chapter記錄(Ember數據)。 我想將章節ID添加到用戶模型記錄的User.chapters屬性中。
App.Book = DS.Model.extend({
name: DS.attr('string'),
icon: DS.attr('string'),
description: DS.attr('string'),
createdDate: DS.attr('date'),
chapters: DS.hasMany('chapter', { inverse: 'book', async: true}),
bookAssignments: DS.hasMany('bookAssignment', {async: true}),
user: DS.belongsTo('user', { inverse: 'books', async: true} ),
});
App.Chapter = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
source: DS.attr('string'),
book: DS.belongsTo('book', { inverse: 'chapters', async: true}),
user: DS.belongsTo('user', { inverse: 'chapters', async: true} )
});
App.User = DS.Model.extend({
uid: DS.attr('string'),
displayName: DS.attr('string'),
firstName: DS.attr('string'),
lastName: DS.attr('string'),
books: DS.hasMany('condition', { inverse: 'user', async: true}),
chapters: DS.hasMany('statistic', { inverse: 'user', async: true}),
});
我創建了一個Session對象,將其注入到路由和控制器中
App.Session = Ember.Object.extend({
user: null,
userID: '',
});
Ember.Application.initializer({
initialize: function (container, application) {
App.register('session:main', App.Session.create(), { instantiate: false, singleton: true });
// Add `session` object to route to check user
App.inject('route', 'session', 'session:main');
// Add `session` object to controller to visualize in templates
App.inject('controller', 'session', 'session:main');
}
});
但是,會話對象不是模型,無法使用Save()方法保存到商店:
user.save()
我探索的另一個選項是從用戶路由模型掛鈎訪問用戶記錄。 用戶路線:
App.UserRoute = Ember.Route.extend({
model: function() {
//var session = this.get('session');
var user = '';
var _isAutheticated = this.isAutheticated;
var store = this.store;
var _firebase = new Firebase("https://dynamicslife.firebaseio.com");
_firebase.onAuth(function(authData) {
if (authData) {
_isAutheticated = true;
console.log('user authenticated with Firebase', authData.uid);
user = store.find('user', authData.uid).then(function(_user) {
console.log('user found', _user);
return _user;
}, function(error) {
// user does not exist or some other error
console.log('please log again');
});
} else if (error) {
_isAutheticated = false;
console.log('failled login attempt', error);
}
}); //end authWithOAuthPopup
console.log('My user2: ', user);
//this.set('isAutheticated', _isAutheticated);
return user;
}
});
我嘗試了Needs來從Chapter Controller中訪問User記錄:
App.ChaptersController = Ember.ArrayController.extend({
needs: 'user',
user: Ember.computed.alias("controllers.user.model"),
});
但是,用戶仍然不可用。
我想象我的語法不正確。 如果有人可以指示我以可以從“章節”控制器中修改和保存的方式訪問用戶記錄的正確方法,我將不勝感激。
“章”路由未嵌套在“用戶”路由下,因為模板未嵌套。 即使模板沒有嵌套使用ModelFor(),我也應該在用戶路由下嵌套章節路由嗎?
您應該能夠將會話對象注入所有控制器和/或路由。 然后,您將可以在需要的地方訪問它。
在會話中,創建一個名為user的屬性,該屬性將加載用戶(也許使用您放置在該路由中的代碼),並將所有內容鏈接到控制器中的“ session.user”,您應該會做得很好。
關於路由問題,是的,如果要從路由加載用戶模型,則應加載該路由。 可以作為根路由,也可以在路由樹中。
如果您嘗試從章節模型訪問特定記錄,則可以通過控制器使用this.store.find('chapter', record_id)
,因為store
適用於所有控制器(和路由)。
如果需要從控制器創建新的章節記錄,則可以執行this.store.createRecord('chapter')
,它將為您提供一個空的記錄。
在這種情況下,將無需直接注入模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.