2016-07-24 4 views
0

私はemberを新しくしています。自分の行動の1つに別のアクション(シャッフルとして表示)を使用したいと思います。私はここで何か間違っていることを知っている、シャッフルメソッドは実際に何もしていない。私はそれを間違って呼び出しているのですか、他のアクションで使用されていないアクションですか?ここでは、コードです:コントローラ内部のアクションを使用していますか?

import Ember from 'ember'; 

export default Ember.Controller.extend({ 

    taskData: [], 
    personData: [], 
    taskIn: ' ', 
    personIn: ' ', 



    actions: { 

    saveTask() { 

     const task = this.get("taskIn"); 
     this.taskData.push(task); 
    }, 

    savePerson() 
    { 
     const person = this.get("personIn"); 
     this.personData.push(person); 
    }, 

    print(){ 
     var taskString; 

     //this.taskData.remove(0); 
     for(var i = 0; i < this.taskData.length; i++) 
     { 
      taskString = taskString + this.taskData[i]; 
     } 
     alert(taskString); 
     //alert(this.personData); 
    }, 

    shuffle(array) { 
     var currentIndex = array.length, temporaryValue, randomIndex; 

     // While there remain elements to shuffle... 
     while (0 !== currentIndex) { 

      // Pick a remaining element... 
      randomIndex = Math.floor(Math.random() * currentIndex); 
      currentIndex -= 1; 

      // And swap it with the current element. 
      temporaryValue = array[currentIndex]; 
      array[currentIndex] = array[randomIndex]; 
      array[randomIndex] = temporaryValue; 
     } 

     return array; 
    }, 

    //algorithm to match up tasks with people 
    assign(){ 


     var newTaskD = this.shuffle(this.taskData); 
     var newPersonD = this.shuffle(this.personData); 
     var taskString = ''; 
     var peopleString = ''; 

     for(var i = 0; i<newTaskD.length; i++) 
     { 
      taskString += " " + newTaskD[i]; 

     } 

     for(var j = 0; j<peopleString.length; j++) 
     { 
      peopleString += " " + newPersonD[j]; 

     } 

     alert(peopleString); 
     alert(taskString); 

    } 
    } 
}); 
+0

インターフェイスはシャッフルアクションをトリガする必要がありますか?または、少なくとも1つのアクションが呼び出す必要があるメソッドを設定しようとしていますか? –

+0

私は後者をしようとしています。 – jvangore31

答えて

1

あなたは、彼らがコントローラのコンテキストで呼び出されactionsハッシュ中にあなたのアクションを定義する場合でも。したがって、アクションハッシュではなくコントローラthisがコントローラです。

これはthis.shuffleが機能しない理由です。shuffleはコントローラではなく、actionsハッシュで定義されているためです。何をするか

はこれです:

this.actions.shuffle(); 

しかし、その後shuffleアクションのあなたのthisコンテキストは間違っているだろう:それはactionsハッシュではなく、コントローラになります。したがって、これを上書きする必要があります:

this.actions.shuffle.call(this); 

これは少し醜いですか?あなたの質問にお答えします:

他のアクションで使用される予定のないアクションですか?

はい!これを行うには、ではなく、同じcontroller.jsファイル内の通常の関数を呼び出すか、コントローラで定義されている通常のメソッドを使用することをお勧めします。だから、このどちらかの操作を行います。

import Ember from 'ember'; 

function foo(arg) { 
    ... 
    return something; 
} 

export default Ember.Controller.extend({ 
    actions: { 
    bar() { 
     let baz = foo(this.things); 
     ... 
    } 
    } 
} 

それともこれを:

import Ember from 'ember'; 

function foo(arg) { 
    ... 
    return something; 
} 

export default Ember.Controller.extend({ 
    foo(arg) { 
    ... 
    return something; 
    }, 
    actions: { 
    bar() { 
     let baz = this.foo(this.things); 
     ... 
    } 
    } 
} 

actionsハッシュについてのアイデアは、あなたのテンプレート(actions)と、通常の方法で呼び出される関数の間で分離することです。

+0

おかげで、これは多くの助けになりました! – jvangore31

+0

これは私があなたが達成しようとしていたものを見つけた後に提案しようとしていたものです。よくやった。 :) –

関連する問題