2012-04-04 10 views
2

Lassen Sie mich zunächst sagen, dass ich brandneu zu Ember.js und relativ neu in der Software-Entwicklung bin. Ich versuche, eine Anwendung zur Protokollierung von Aktivitäten zu erstellen, in der Benutzer kleine Textaktualisierungen ähnlich wie Twitter oder Facebook posten können, wöchentliche Ziele erstellen und Beiträge optional auf Ziele anwenden können, indem sie beim Hochladen von Aktualisierungen ein Dropdown-Menü auswählen. Ich war in der Lage, alles zum Laufen zu bringen, außer zu zählen, wie oft ein Benutzer einen Beitrag auf ein bestimmtes Ziel "angewendet" hat. Also hier ist eine abgespeckte Version des Codes unter: (Auch ich zusammen ein jsfiddle http://jsfiddle.net/jjohnson/KzK3B/3/)Ember.js - Erstellen dynamischer FilterEigenschaftswerte für Ziel-App

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') 

}); 

Also, ich glaube, ich habe nahe kommen, dies herauszufinden, kann aber durchaus nicht bekommt es sogar obwohl ich sicher bin, dass ich etwas unglaublich Einfaches übersehe. Wenn ich einen statischen Zielnamen-Wert in die TimesThisWeek -Funktion, (var -Wert) die Zeiten ThisWeek Anzahl funktioniert für dieses bestimmte Ziel. Aber wenn ich versuche, ein "this" für den Iterator-Lenker (var value2) hinzuzufügen, kann ich mal nicht thisWeek für das betreffende Ziel arbeiten lassen.

Ich bin sicher, das ist sehr einfach, aber jede Hilfe würde sehr geschätzt werden !!!

Antwort

1

Verstanden mit CollectionView ausgeführt wird, und Bewegen der gebundenen Filterung des Element in der Ansicht @http://jsfiddle.net/MikeAski/KzK3B/5/

In der Vorlage:

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

Ausblick: auch

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]') 
}); 

Sie können aber verschiebe diese Eigenschaft als Mitglied oder Goal Modell (es hängt von Ihrem realen Anwendungsfall ab: Ich nehme an, dass Sie auch ha variierender Zeitrahmen für das Ergebnis usw.).

EDIT

Letzte Version: http://jsfiddle.net/MikeAski/z3eZV/

+0

Awesome, vielen Dank für die schnelle Antwort! Aus irgendeinem Grund kann ich dies nicht in meine aktuelle App integrieren und richtig funktionieren, aber ich werde weiter daran arbeiten. Auch ein paar kurze Fragen: 1) Warum selbst verwenden = das? Ich habe das ein paar Mal gesehen, weiß aber noch nicht, warum es nützlich ist. 2) Ich habe daran gedacht, TimesWhite aus dem Goal-Modell herauszuhalten, weil ich dachte, es könnte einfacher sein, zusätzlich nach Zeit zu filtern, wenn es nicht im Modell wäre, aber denkst du, es wäre eine kluge Entscheidung, damit umzugehen Zielmodell selbst? Ich werde Glut-Daten und Schienen für Persistenz verwenden und die beste Lösung wollen –

+0

1) Ho ... ja, 'Selbst' war ein Rest ... :-P 2) Nun, wie gesagt, es kommt darauf an auf den vollen Kontext, aber persönlich, würde ich es in das Modell einfügen, da es ein guter Ort ist, Geschäftslogik zu speichern (was "TimesThisWeek" fast ist). –

+0

Danke für die Antwort! Ich habe die JS-Geige aktualisiert - ich kann nicht scheinen, dass die Bindungen korrekt ausgelöst werden, wenn ein neuer Beitrag hinzugefügt wird. http://jsfiddle.net/jjohnson/sbytv/1/ Wenn die Schaltfläche "Beitrag hinzufügen" angeklickt wird, werden timesThisWeek nicht aktualisiert. Ich habe versucht @ each.goal_name und so weiter, aber nichts hat funktioniert. Irgendwelche Ideen? –