2014-10-08 1 views
1

это был мой первоначальный подход, но я получаю сообщение об ошибке код:Как правильно вводить свойство в контроллер

Ember.Application.initializer({ 
name: "currentUser", 

initialize: function(container, application) { 
    var store = container.lookup('store:main'), 
    attributes = $("meta[name='current-user']").attr('content'); 

if(attributes){ 
    var object = store.push(App.User, JSON.parse(attributes)), 
     user = App.User.find(object.id), 
     controller = container.lookup('controller:currentUser').set('content', user); 

    container.typeInjection('controller', 'currentUser', 'controller:currentUser'); 
    } 
} 
}); 

Ошибка:

Error: Cannot inject a `controller:current-user` on other controller(s). Register the `controller:current-user` as a different type and perform the typeInjection. 

Так что я попробовал несколько других подходов, так как

Ember.Application.initializer({ 
name: "currentUser", 
after: "store", 

initialize: function(container, application) { 

    var store, user, proxy; 
    var attributes = $("meta[name='current-user']").attr('content'); 
    if (attributes) { 
     application.deferReadiness(); 
     container.lookup('store:main').find('user', object.id).then(function(user) { 
     application.register('user:current', user, { instantiate: false, singleton: true }); 
     application.inject('route', 'currentUser', 'user:current'); 
     application.inject('controller', 'currentUser', 'user:current'); 
     application.advanceReadiness(); 
    }, function() { 
     application.advanceReadiness(); 
     } 
    }); 
    } 
} 
}); 

это не вызывает ошибок, но также не работает должным образом

другой подход, который я попытался было это

Ember.Application.initializer({ 
name: "currentUser", 
after: "store", 

initialize: function(container, application) { 

    var store, user, proxy; 
    var attributes = $("meta[name='current-user']").attr('content'); 
    if(attributes) { 
     application.deferReadiness(); 
     store = container.lookup('store:main'); 
     proxy = App.CurrentUserObjectProxy.extend(); 
     container.register('user:current', proxy, {singleton: true}); 
     proxy = container.lookup('user:current'); 
     var object = store.push(App.User, JSON.parse(attributes)) 
     store.find('user', object.id).then(function (user) { 

      proxy.set('content', user); 

      application.inject('controller', 'currentUser', 'user:current'); 

      application.advanceReadiness(); 
     }); 
     } 
     } 
    }); 

в другом файле

App.CurrentUserObjectProxy = Ember.ObjectProxy.extend({ 
content: null 
}); 

То, что я пытаюсь сделать, чтобы отладить этот вопрос логарифмически имя CurrentUser на шаблоне приложения

{{log currentUser.firstName}} 

Я могу видеть в моем инспекторе-инкубаторе, что данные для пользователя добавляются должным образом, это просто не правильно ли задает свойство currentUser на контроллере, какие-либо советы о том, что я должен делать по-другому?

ответ

1

Вызов поиска уже возвращает ObjectProxy, поэтому вы можете просто позвонить find и установить его в инжектор.

Ember.Application.initializer({ 
    name: "currentUser", 
    after: "ember-data", 

    initialize: function(container, application) { 

    var store, user, proxy; 
    var attributes = {id:1, name:'foo'}; 

    if(attributes) { 
     store = container.lookup('store:main'); 
     store.push('user', attributes); 
     var user = store.find('user', attributes.id); 
     container.register('user:current', user, {singleton: true, instantiate:false}); 
     application.inject('controller', 'currentUser', 'user:current'); 
    } 
    } 
}); 

Пример: http://emberjs.jsbin.com/OxIDiVU/1144/edit

Если вы хотите, чтобы иметь возможность поменять его в будущем день вы можете использовать шаблон (упомянутый в моем ответе) здесь Ember Data Save method, Create vs update

Пример: http://emberjs.jsbin.com/OxIDiVU/1145/edit

+0

спасибо за помощь – flylib

+0

Любопытно, почему 'if (attributes)'? Должен ли программист быть обеспокоен тем, что время выполнения JavaScript не будет выполнять 'var attributes = {...};' правильно? – Sukima

+0

Я скопировал и вставил вопрос, я думаю, что 'attributes' действительно является результатом другой функции, которая может возвращать' undefined'/'null'. – Kingpin2k