2012-04-04 1 views
2

Прежде всего, позвольте мне предисловие к этому, сказав, что я совершенно новый для Ember.js и относительно новичок в разработке программного обеспечения. Я пытаюсь создать приложение регистрации активности, в котором пользователи могут публиковать небольшие текстовые обновления, похожие на твиттер или facebook, также могут создавать еженедельные цели и при необходимости «применять» сообщения к целям, выбирая из раскрывающегося списка цели при публикации обновлений. Я смог заставить все работать, за исключением подсчета, сколько раз пользователь «применял» сообщение к определенной цели. Так вот урезанная версия кода ниже: (Кроме того, я поставил вместе с jsfiddle http://jsfiddle.net/jjohnson/KzK3B/3/)Ember.js - создание динамического фильтра. Значения свойств для целевого приложения

App = Ember.Application.create({}); 

App.Goal = Ember.Object.extend({ 
    goalTitle: null, 
    timesPerWeek: null 

}); 

App.Post = Ember.Object.extend({ 
    postContent: null, 
    goal_name: null 
}); 

App.postsController = Ember.ArrayController.create({ 
    content: [ 
     App.Post.create({ postContent: "went and played golf today, shot 69", goal_name: "Play a round of golf" }), 
     App.Post.create({ postContent: "went and played golf today, shot a 70", goal_name: "Play a round of golf" }), 
     App.Post.create({ postContent: "went to the range for an hour", goal_name: "Range practice" }) 
    ] 




}); 

App.goalsController = Ember.ArrayController.create({ 
    content: [ 
     App.Goal.create({ goalTitle: 'Play a round of golf', timesPerWeek: 2 }), 
     App.Goal.create({ goalTitle: 'Range practice', timesPerWeek: 3 }) 
         ], 

    timesThisWeek: function() { 
      var value = "Play a round of golf"; 
      var value2 = this.goalTitle; 
     return App.postsController.filterProperty('goal_name', value).get('length'); 
     }.property('@each.goal_name') 

}); 

Так что, я думаю, что я пришел близко к выяснить это, но совсем не могу получить его даже хотя я уверен, что упускаю из виду что-то невероятно простое. Когда я ставил статическое имя цели в функции timesThisWeek, (значение var), счетчик времениThisWeek работает для этой конкретной цели. Но если я попытаюсь создать, добавьте «this» in для итератора handlebars (var value2), я не могу заставить timesThisWeek работать для соответствующей цели.

Я уверен, что это очень простой, но любая помощь будет принята с благодарностью !!!

ответ

1

Понял работает с использованием CollectionView и перемещения связанного фильтрации элемента в представлении @http://jsfiddle.net/MikeAski/KzK3B/5/

В шаблоне:

{{view Ember.CollectionView contentBinding="App.goalsController" itemViewClass="App.GoalView"}} 

Просмотр в JS:

App.GoalView = Ember.View.extend({ 
    templateName: "goal-view", 
    timesThisWeek: function() { 
     return App.postsController.filterProperty('goal_name', Ember.getPath(this, "content.goalTitle")).get('length'); 
    }.property('[email protected]') 
}); 

Но вы можете также переместите это свойство в качестве члена или модель Goal(это зависит от вашего реального прецедента: я полагаю, вы также ha переменные временные рамки для результата и т. д.).

EDIT

Последняя версия: http://jsfiddle.net/MikeAski/z3eZV/

+0

Awesome, спасибо за быстрый ответ! По какой-то причине я не могу интегрировать его в свое текущее приложение и работать правильно, но я буду продолжать работать над ним. Кроме того, несколько быстрых вопросов: 1) Зачем использовать self = this? Я видел это несколько раз, но пока не знаю, почему это полезно. 2) Я думал о том, чтобы держать TimeThisWeek вне модели Goal, потому что я думал, что было бы легче фильтровать дополнительно по времени, если бы это было не в модели, но вы думаете, что было бы разумным решением справиться с этим в Модель цели сама? Я собираюсь использовать данные ember-data и rails для настойчивости и хочу наилучшего решения –

+0

1) Хо ... да, 'self' был отдыхом ... :-P 2) Хорошо, как сказано, это зависит в полном контексте, но лично, я бы поместил его в модель, так как это хорошее место для хранения бизнес-логики (что 'timesThisWeek' почти есть). –

+0

Спасибо за ответ! Я обновил скрипт JS - я не могу заставить привязки правильно срабатывать при добавлении нового сообщения. http://jsfiddle.net/jjohnson/sbytv/1/ При щелчке по кнопке «Добавить сообщение» timesThisWeek не обновляется. Я пробовал @ every.goal_name и так далее, но ничего не получилось. Есть идеи? –

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