Vue.js で単純なプラグインを作成して、vue-resource
プラグインをラップしてリクエストの状態を追跡しようとしています。
function State() {}
State.prototype.post = function (ctx, name, url, data, successCB, errorCB) {
var options = {};
if (errorCB) {
options.error = function (resp) {
ctx[name] = 'error';
return errorCB(resp);
};
}
ctx[name] = 'sending';
ctx.$http.post(url, data, function (res, code, req) {
ctx[name] = 'sent';
return successCB(res, code, req);
}, options);
};
function install(Vue) {
Object.defineProperties(Vue.prototype, {
$state: {
get: function () {
return new State;
// return Vue.state.bind({$vm: this});
}
}
});
}
module.exports = install;
ctx
呼び出し元の Vue からコンテキストを渡して、その値にアクセスできることがわかりdata
ます。私は、vue-resource
プラグインを介してこれを自動的にバインドする方法があることをプラグインで見てきましたが、構文を正しく取得することはできません。
ctx
基本的に、毎回コンテキストを渡す必要がないようにしたいと思います。適切なコンテキストが既にあるはずです。
編集
明確にするために、適切なコンテキストを渡すソリューションを探しています。上記は単なる例であり、状態を追跡するソリューションを探しているわけではありません。
たとえば、vue-resource
プラグインで http リクエストを行う場合。
this.$http.get('/some/url', {}, function () {
this.func();
console.log(this.var);
});
コンテキストはコールバックに既に存在します。var _this = this
ビューのスコープに入るために何らかの操作を行う必要はありません。this
適切なプラグインがちょうどそこにあるように、プラグインでも同じことを達成したいと考えています。プラグインから理解しようとしていvue-resource
ますが、すべてのコードをたどるのに苦労しています。