4

NodeJS API にリクエストを送信しようとしています。クライアントには、Mithril フレームワークを使用しています。最初の例を使用して、リクエストを作成し、データを取得しました。

var Model = {
    getAll: function() {
        return m.request({method: "GET", url: "http://localhost:3000/store/all"});
    }
};

var Component = {
    controller: function() {
        var stores = Model.getAll();

        alert(stores); // The alert box shows exactly this: function (){return arguments.length&&(a=arguments[0]),a}
        alert(stores()); // Alert box: undefined
    },
    view: function(controller) {
        ...
    }
};

これを実行した後、Chrome 開発者ツールを通じて、API が次のように正しく応答していることに気付きました。

[{"name":"Mike"},{"name":"Zeza"}]

このデータをコントローラーに取得する方法が見つかりません。彼らは、このメソッドを使用するとundefined、リクエストが完了するまで var が保持される可能性があると述べたので、次の例に従って次を追加しました。

var stores = m.prop([]);

モデルの前に、リクエストを次のように変更します。

return m.request({method: "GET", url: "http://localhost:3000/store/all"}).then(stores);

同じ結果が得られるため、何か間違ったことをしている可能性があります。

目的は、応答からデータを取得し、それをビューに送信して反復することです。

4

1 に答える 1

2

説明:

m.request は関数であり、m.request.then() も同様です。そのため、「ストア」値は次のようになります。

"function (){return arguments.length&&(a=arguments[0]),a}"

「stores()」は未定義です。非同期の ajax リクエストを行うため、すぐに結果を取得できず、少し待つ必要があります。少し遅れて「stores()」を実行しようとすると、データがそこにあります。そのため、基本的に約束(「その後」機能)が必要です。then(param) のパラメータとして渡された関数は、応答の準備ができたときに実行されます。

作業サンプル:

このサンプルを試して、必要なものを実装できます。

var Model = {
    getAll: function() {
        return m.request({method: "GET", url: "http://www.w3schools.com/angular/customers.php"});
    }
};

var Component = {

    controller: function() {
        var records = Model.getAll();

        return {
            records: records
        }
    },

    view: function(ctrl) {
        return m("div", [
            ctrl.records().records.map(function(record) {
                return m("div", record.Name);
            })
        ]);
    }
};

m.mount(document.body, Component);

さらに質問がある場合は、こちらでお気軽にお尋ねください。

于 2015-11-23T06:16:00.760 に答える