2013-07-04 4 views
2

Я пытаюсь создать новую запись в ember. Раньше я вручную создавал каждый из полей модели на объектном контроллере, но это действительно кажется излишним. С кодом in this fiddle, как я начала вводить информацию в текстовые поля, я получаю сообщение об ошибкеEmber create object

Assertion failed: Cannot delegate set('name', t) to the 'content' property of object proxy <App.StockNewController:ember258>: its 'content' is undefined 
+0

код вашего говорим о не хватает в вашем jsfiddle – intuitivepixel

+0

суровом это не спасло. @intuitivepixel теперь фиксируется – Gevious

ответ

3

В основном то, что вам не хватает некоторые переменные, определенные в вашем App.StockNewController. Потому что, когда привязки, определенные в ваших шаблонах, срабатывают, и на вашем поддерживающем контроллере нет таких свойств, вы получаете ошибку. Я немного изменил его, и теперь ошибка исчезла.

App.StockNewController = Em.ObjectController.extend({ 
    name: '', 
    code: '', 
    description: '' 
}); 

См. Здесь jsbin.

Сообщите мне, если это поможет.

+1

Этот подход кажется мне лишним. В настоящее время у меня есть 20 атрибутов. В будущем некоторые атрибуты также будут динамичными, поэтому жесткое кодирование - далеко не так. Разве нет способа наследовать поля от объекта модели? Я предположил, что именование контроллера должно указывать ember, что контроллер подключается к этой модели и поэтому достаточно умен, чтобы управлять полями. – Gevious

+0

просто определяя модель и контроллер не связывает их так, как вы ожидаете, много * magic * – intuitivepixel

+0

Это жаль. Таким образом, решение состоит в том, чтобы определить все поля в модели * и * в объектном контроллере. Кажется неуклюжим. – Gevious

0

Причина заключается в том, что ваш StockNewController расширяет Ember.ObjectController, который расширяет Ember.ObjectProxy.

Ember.ObjectProxy делегирует все свои неизвестные свойства объекту контента за одним исключением. Если мы попытаемся установить новое свойство в прокси-сервере, пока его содержимое не определено, мы получим исключение.

Здесь вы пытаетесь установить свойство name на ObjectController, когда его содержимое не определено.

Простым решением будет установка содержимого перед установкой любого другого свойства. Это можно сделать в самом крючке модели.

App.StockNewRoute = Em.Route.extend({ 
    model: function() { 
    return App.Stock.create(); 
    } 
}); 

Для простоты я обновил fiddle с простым Ember.Object для модели.

Вы можете получить подробную информацию о ObjectProxy here

+0

По сути, такой же подход, как и решение @ intuitivepixel. Не решает проблему определения полей как в модели, так и в контроллере. – Gevious