Tôi đang cố tạo một plugin đơn giản trong Vue.js để bao bọc plugin vue-resource
để theo dõi trạng thái yêu cầu.Ngữ cảnh ràng buộc Vue.js trong plugin?
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;
Bạn sẽ thấy tôi vượt qua ctx
bối cảnh từ Vue gọi để có được quyền truy cập vào nó data
giá trị. Tôi đã nhìn thấy với các plugin vue-resource
rằng có một cách để tự động ràng buộc điều này thông qua các plugin dơi không thể hoàn toàn có được cú pháp đúng.
Về cơ bản tôi muốn tránh phải vượt qua ngữ cảnh ctx
trong mỗi lần, nó chỉ cần có ngữ cảnh phù hợp.
EDIT
Để làm rõ Tôi đang tìm kiếm một giải pháp để vượt qua những bối cảnh thích hợp trong. Trên đây chỉ là loại một ví dụ và tôi không tìm kiếm một giải pháp để theo dõi trạng thái.
Ví dụ: trong plugin vue-resource
nếu chúng tôi thực hiện bất kỳ yêu cầu http nào.
this.$http.get('/some/url', {}, function() {
this.func();
console.log(this.var);
});
Ngữ cảnh đã có trong gọi lại. Tôi không cần phải thực hiện một số loại var _this = this
để tham gia vào phạm vi xem. Tôi muốn đạt được điều tương tự cho plugin của mình sao cho phù hợp với this
chỉ ở đó. Tôi đang cố gắng tìm ra từ plugin vue-resource
nhưng có một thời gian khó khăn sau tất cả các mã.
Vì vậy, bạn có thuộc tính 'name' trên thành phần Vue của mình và bạn muốn plugin này cập nhật giá trị đó khi yêu cầu HTTP diễn ra? Tôi nghĩ điều đó mang lại cho bạn một chuỗi trách nhiệm xấu. Bạn có thể tạo một thuộc tính 'State' được gọi là' status' được cập nhật không? Sau đó, bạn có thể biết trạng thái hiện tại bằng cách sử dụng 'this. $ State.status'? Sau đó, các plugin chịu trách nhiệm cho mục đích của nó, và các thành phần vẫn độc lập – Jeff