0

私はtodosのリストを持っており、それらに関連付けられたタグプロパティがあります。ビューには、「Sort By Tag」ボタンがあります。そのボタンを押すと、コレクションをタグでソートする必要があります。今は何も起こっていない。以下はコードです。どうしましたか?SproutCoreコレクションソート

In todos.js I have: 
Todos.SortingView = SC.TemplateView.extend({ 
    sortBinding: 'Todos.todoListController.sortTodos' 
}); 

and in todoListController, I have: 
    sortTodos: function() { 
    Todos.store.find(Todos.Todo).sortProperty('tag'); 
    } 

and in the handlebars view I have: 
{{#view Todos.SortingView id="stats"}} 
    {{#view SC.Button classBinding="isActive" target="Todos.todoListController" action="sortTodos"}} 
    Sort By Tag 
    {{/view}} 
{{/view}} 

{{#collection SC.TemplateCollectionView contentBinding="Todos.todoListController" itemClassBinding="content.isDone"}} 
    {{view Todos.MarkDoneView}} - Tag - {{content.tag}} 
{{/collection}} 
+0

あなたのListControllerは何ですか? – hvgotcodes

+0

Todos.todoListController = SC.ArrayController.create({ //空のアレイを有するアレイコントローラを初期化し コンテンツ:[]、 //機能sortTodos:関数(){ Todos.store.find(トドス.Todo).sortProperty( 'tag'); }、 //関数 }); –

答えて

1
sortTodos: function() { 
    Todos.store.find(Todos.Todo).sortProperty('tag'); 
} 

次のようになります。

sortTodos: function() { 
    this.set('orderBy', 'tag'); 
} 

今、あなたは項目を追加する場合、あなたはaddObjectを使用してtodoLでarrangedObjectsだけでなくcontent


createTodo: function(title) { 
    // var todo = Todos.Todo.create({ title: title });  
    var todoExists = this.findProperty('title', title).length > 0; 
    if (!todoExist) { 
     Todos.store.createRecord(Todos.Todo, { title: title }); 
     // this.pushObject(todo); 
    } 
} 
+0

優秀、ありがとうございました。もう1つ質問があります。新しいアイテムを追加すると、コレクションにもう1つ追加されます。だから、私は同じtodosを2度見ている。 –

+0

私はビューで何か間違っている、または何ですか? –

+0

Todos

{{#view Todos.CreateTodoView}} {{/ビュー}} {{#viewのTodos.SortingView ID = "統計"}} {{#view SC.Button classBinding = "のisActive" ターゲット= "Todos.todoListController" ACTION = "sortTodos "タグにより}} ソート{{/ビュー}} {{/ビュー}} {{#collection SC.TemplateCollectionView contentBinding =" Todos.todoListController "}} {{ビューTodos.MarkDoneView}} - タグ - {{content.tag}} {{/ collection}} –

0

を使用する必要があります。最初にコントローラのコンテンツをデータストアから読み込んだと仮定して、istControllerを呼び出します。

sortTodos: function(){ 
var query= SC.Query.local('Todos.Todo', {orderBy: 'tag'}); 
Todos.todoListController.set('content',Todos.store.find(query)); 
} 
関連する問題