2013-09-15 3 views
1

В моем шаблоне я повторяю массив, который находится в модели. Для простоты я буду использовать следующий пример:EmberJS - Шаблон условный с параметрами

{{#each user in appModel.users}} 

Теперь я пытаюсь отобразить элементы user, если пользователь находится в определенной группе. У меня есть App.Group как модель, которая имеет метод проверки, находится ли пользователь в группе. Этот метод принимает параметр, пользователь.

Так,

{{group.has_user user}} 

Где group является конкретным экземпляром App.Group, будет возвращать истинный или ложный, если ID пользователя был найден в списке группы из идентификаторов.

Я пытаюсь найти способ использовать этот метод в качестве условного шаблона. Как так:

{{#if group.has_user user}} 
    <block> 
{{/if}} 

Чтобы поставить все это вместе:

{{#each user in appModel.users}} 
    {{#if group.has_user user}} 
    <block displaying user data> 
    {{/if}} 
{{/each}} 

Таким образом, желаемый эффект отображения пользователей группы будет достигнута. Проблема заключается в том, что вспомогательный помощник {{#if}} не может принимать параметр с помощью метода.

Я попытался использовать специальный помощник регистра, но не смог найти способ передать атрибуты модели. Если бы я использовал помощник в моем шаблоне так:

{{#ifUserInGroup user.id group.id}} 

Я хотел бы получить строки «user.id» и «group.id» в качестве передаваемых параметров. Помощник записывается так:

Ember.Handlebars.registerHelper('ifUserInGroup', function(val1, val2, options){ 
    //This is where I would get the models, but val1 and val2 are strings, not id's... 
}); 

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

спасибо.

ответ

-1

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

{{#each group in model}} 
    {{#if group.has_user}} 
     <block> 
    {{/if}} 
{{else}] 
    <block> 
{{/each}} 

Затем, в вашем классе модели, извлеките данные примерно так.

App.YourModelClass = Ember.Model.extend({ 
    has_user:function(){ 
     var value = this.get('user'); 
    } 
}); 

вы также можете использовать valueBinding свойство связывать свои свойства к модели классов, что-то вроде этого ниже.

{{view Ember.TextField valueBinding="yourProp"}} 

Дополнение просил

Ниже приведен ваш шаблон изменения ...

{{#ifUserInGroup user group}} 
    yes 
    {{else}} 
    no 
{{/ifUserInGroup}} 

Ниже ваш руль помощник.

Handlebars.registerHelper('ifUserInGroup', function (user, group, options) { 
    if (typeof group[user] != 'undefined') { 
     return options.fn(this); 
    } else { 
     return options.inverse(this); 
    } 
}); 

Ниже скрипку для вас. http://jsfiddle.net/R8u6g/12/

+0

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

+0

Отметьте обновленное сообщение @MichaelBattaglia – Thalaivar

+0

Мне это удалось. Ваше сообщение помогло мне туда добраться, но пропала одна вещь. Вы видите, что в вашей скрипке вы передали фактическое имя группы, чтобы вы могли найти группу в зарегистрированном помощнике, просто просмотрев имя. Я хотел найти, был ли пользователь в группе, передав два связанных свойства, например, в моем исходном сообщении, где я передал user.id и group.id в ifUserInGroup. Передача этого в вашей скрипке приведет к тому, что «user.id» и «group.id» будут использоваться зарегистрированным помощником в виде строк. Ключ должен был использовать Ember.Handlebars.get. Я покажу, как я сделал это еще один пост. –

6

EDIT: В версии 1.0 уголек, это решение не работать больше.

Чтобы основать мой зарегистрированный помощник с моего оригинального поста, и с некоторой помощью от Vinothbabu мне удалось что-то сделать.

То, что я отсутствовал, был Ember.Handlebars.get(root, path, options)

Ember.Handlebars.registerHelper('ifUserInGroup', function(user, group, options){ 
    user = Ember.Handlebars.get(this, user, options); 
    group = Ember.Handlebars.get(this, group, options); 
    if (group.has_user(user)) { 
     return options.fn(this); 
    } else { 
     return options.inverse(this); 
    } 
}); 

С этой функцией, я мог бы получить фактические данные переплетенных вместо строк, передаваемых в помощнике.

Так,

{{#each user in users}} 
    {{#ifUserInGroup user.id some_group.id}} 
    <block displaying user data> 
    {{/ifUserInGroup}} 
{{/each}} 

, где users является свойством массива модели приложения, и some_group является экземпляром App.Group свойством модели приложения, будет отображать блок для каждого пользователя, который находится в группе.

+0

Помощники блока не поддерживаются в ember ... http://emberjs.com/api/classes/Ember.Handlebars.html#method_registerBoundHelper – Kingpin2k

+1

Исправить. Раньше это было, но, к сожалению, с версии 1.0 это не так. –

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