2017-10-02 12 views
0

現在、jQueryドラッグ&ドロップformbuilder pluginを使用しています。今、私はデータベースから要素をドラッグ・アンド・ドロップして、その要素をドラッグ&ドロップ・ビルダーに追加したいと考えています。getJSON()内から呼び出されたときにPush()が機能しない

これは私の要求機能である:

function getElements(){ 
    $.getJSON(getContextPath() + "/api/elements/get", function (data){ 
     $.each(data, function(key, val) { 
      addElement(); 
     }); 
    }); 
} 

は今、私は(私はthis例を使用して、私はいくつかの事前定義された値を使用)formbuilderインスタンスにそれらを追加したい:

function addElement(){ 
    if (!window.fbControls) window.fbControls = []; 
    window.fbControls.push(function(controlClass) { 
     console.log("HERE"); 
     class controlStarRating extends controlClass { 

      static get definition() { 
       return { 
       icon: '', 
       i18n: { 
        default: 'Star Rating' 
       } 
       }; 
      } 

      configure() { 
       this.js = '//cdnjs.cloudflare.com/ajax/libs/rateYo/2.2.0/jquery.rateyo.min.js'; 
       this.css = '//cdnjs.cloudflare.com/ajax/libs/rateYo/2.2.0/jquery.rateyo.min.css'; 
      } 

      build() { 
       return this.markup('span', null, {id: this.config.name}); 
      } 

      onRender() { 
       let value = this.config.value || 3.6; 
       $('#'+this.config.name).rateYo({rating: value}); 
      } 
     } 

     // register control 
     controlClass.register('starRating', controlStarRating); 
     return controlStarRating; 
    }); 
} 

残念ながら、私のconsole.log("HERE")は呼び出されていないので、そこに停止しているようです。奇妙なことは、私がリクエスト機能としてこれを使用すると、関数は正しく実行されているということです。

function getElements(){ 
    var allElementsData = ["test"]; 
    // $.getJSON(getContextPath() + "/api/template/get", function (data){ 
    // }); 
    $.each(allElementsData, function(key, val) { 
     addElement(); 
    }); 
} 

問題は何ですか?

+0

と表示されます。問題は、**/api/elements/get **の戻り値にあると仮定します。 **データ**値を追加できますか?それは配列かjsonオブジェクトですか? – gaetanoM

+0

いいえ、私は返されたデータ値をまだ使用していません...ハードコードされたデフォルト値でコードを使用します。 – Jordy

+0

申し訳ありませんが、** ** getJSON **の中では、** $。each(data、func **)はありません – gaetanoM

答えて

0

関数addElementでは、別の関数を配列window.fbControlsにプッシュしています。しかし、その2番目の関数は、実行されていない配列にのみ置かれます。たとえば、次の文で実行することができます。window.fbControls[0]()。その後、あなたはconsole.log("HERE")

+1

それはどういう意味ですか?なぜ、2番目の 'getElements()'関数では動作しますが、最初の 'getElements()'関数では機能しませんか? – Jordy

+0

いいえ、配列に追加する関数がどこに呼び出されているのかわかりませんが、 $ .getJSONで動作していないと思う唯一の理由は、/ api/elements /はおそらくデータとして '' '[]' ''(空の配列)を返します。この関数は0回呼び出されます。/ api/elements/getへの呼び出しのネットワークデータ(ブラウザの開発ツール)を調べましたか? – GHN

関連する問題