gpt4 book ai didi

javascript - 使用背景 :true? 时如何在 MithrilJS 中使用 m.request 的值

转载 作者:行者123 更新时间:2023-11-30 12:28:53 25 4
gpt4 key购买 nike

我在项目中使用 m.request,因为我有一个可能会长时间运行的请求,所以我想使用 background:true 运行它。但是,该值似乎从未设置为生成的 m.prop

我用一个基于这个 Stack Overflow answer 的例子制作了一个 jsFiddle : http://jsfiddle.net/u5wuyokz/9/

我期望发生的是,对 View 的第二次调用应该在 ctrl.test.data() 中有响应值,但它似乎仍然有 undefined。在代码中的 Point A,它记录了正确的值。但是,在 B 点,它记录 false, undefined 然后是 true, undefined

我不确定我是否做错了什么,或者这是否是预期的行为。

jsFiddle 中的代码:

var requestWithFeedback = function(args) {
var completed = m.prop(false)
var complete = function(value) {
completed(true)
return value
}
args.background = true
return {
data: m.request(args).then(complete, complete).then(function(value) {
//Point A
console.log(value);
m.redraw()
return value
}),
ready: completed
}
};

var mod = {
controller : function() {
this.test = requestWithFeedback({
method : "POST",
url : "/echo/json/",
serialize: serialize,
config: asFormUrlEncoded,
data : {
json : "{\"name\" : \"testing\"}"
}
});
},
view : function(ctrl) {
//Point B
console.log(ctrl.test.ready(), ctrl.test.data());
return m("div", ctrl.test.ready() ? 'loaded' : 'loading');
}
};

最佳答案

编辑: 问题是 m.redraw 在分配数据之前被调用。相反,您可以为 data 创建一个 m.prop 并让 ajax 请求在完成时分配该值。 requestWithFeedback 将如下所示:

var requestWithFeedback = function(args) {
var data = m.prop()
args.background = true
m.request(args).then(data).then(function() { m.redraw() })

return {
data: data,
ready: function() {return !!data()}
}
};

这是使用以下代码修改的 fiddle 版本:http://jsfiddle.net/u5wuyokz/11/

关于javascript - 使用背景 :true? 时如何在 MithrilJS 中使用 m.request 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28357664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com