2013-10-02 4 views
1


При переходе на динамический маршрут с пустым массивом в качестве модели, похоже, что Ember относится к нему как undefined.Пустая модель массива, используемая в динамическом маршруте

Таким образом, если это шаблон:

{{#linkTo dynamic arrayProxy}}link{{/linkTo}} 

и это определение маршрута:

DynamicRoute = Ember.Route.create(function() { 
    model: function(params) { 
    return this.modelFor("parent").find(params.name); 
    }, 

    serialize: function(model) { 
    return { name: model.get("name") }; 
    } 
}); 

когда arrayProxy либо [] или Ember.ArrayProxy.create(content: []), после нажатия на ссылку:
Конечно, модельный крючок не будет вызван.
Сериализованный крючок получит undefined как model, независимо от того, что ArrayProxy является допустимым объектом Ember со своими собственными свойствами.

Кто-нибудь знает, как заставить ember handle пустые массивы иначе, чем undefined?

+0

Я думаю, что вам нужно показать больше кода ... У вас есть маршрут под названием ParentRoute? А где определено свойство 'arrayProxy' шаблона? Какова ваша версия для ember? –

+0

Я использую Ember 1.0.0. Сериализованный крюк вызывается сразу после визуализации шаблона, чтобы вывести href linkTo. Крючок модели так и не получил, поэтому ParentRoute не является частью проблемы. – Shany

+0

Вам нужно будет показать код, связанный с вашим шаблоном, с помощью ссылки. – mavilein

ответ

0

Это была моя ошибка ...
Видимо, ссылка была вложена в шаблоне при следующем if блока:

{{#if arrayProxy}} 
    {{#linkTo dynamic arrayProxy}}link{{/linkTo}} 
{{else}}  
    {{#linkTo dynamic}}link{{/linkTo}} 
{{/if}} 

С arrayProxy это пустой ArrayProxy, вызываемая часть else и вторая linkTo.
Следовательно, DynamicRouteserialize крюк получает undefined как аргумент model.

0

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

model: function(params) { 
    return this.modelFor("parent").find(params.name); 
}, 

Без этого serialize всегда получит undefined в качестве переменной модели.

Serialize нужно возвращение тоже:

serialize: function(model) { 
    return { name: model.get("name"); } 
} 
+0

Вы правы, извините, по-видимому, в моем вопросе смешался небольшой кофейник ... :-) К сожалению, это не проблема. – Shany

Смежные вопросы