gpt4 book ai didi

javascript - 异步 knockout observableArray 选择选项加载

转载 作者:行者123 更新时间:2023-12-03 11:47:45 25 4
gpt4 key购买 nike

我有一个基于 ajax 的 selectOptions asincronous 加载程序;它接受远程地址并返回一个可观察数组,该数组正确填充了以下绑定(bind)接受的描述和键值

 <select data-bind="value: selectedVal, options: opts, optionsText: 'desc', optionsValue:'key', optionsCaption: ''"/></div>

事实是,作为incronous,当我触发选择选项更改时,基于某些用户操作,我将其分配给我的模型可观察数组,我没有填充选择,而是保持为空。

 mymodel.opts = loadOptions("<remoteaddress>");

我知道当第二行被调用时,答案还没有到达,但是返回的值是一个 observableArray,所以每当填充时它应该正确响应,并被分配给与 ui 绑定(bind)的可观察数组。

如果我对 ajax 调用返回的对象(当它返回时)从 Firefox 中的 console.log 中获取它进行硬编码,或者如果我将可观察数组 opts 传递到 loadOptions 中,并更改它以在其中构建 opts,然后它就可以工作了,但我确实需要按原样使用 loadOptions,asincronous。我还尝试附加 mymodel.opts.valueHasMutated(),但 ko 无法使用新到达的 observableArray。

如果可以完整保留选项加载器,并且如果可以不使用自定义绑定(bind),我可以在准备好时使用传入的可观察数组进行绑定(bind)吗?

最佳答案

您遇到的问题是,当此行运行时:

mymodel.opts = loadOptions("<remoteaddress>");

它将整个可观察数组替换为不同的 observableArray,而不是更新当前的数组。您需要更新现有的数组 - 您可以更改 loadOptions 以返回普通数组,而不是可观察的数组吗?然后你可以这样做:

//clear any existing entries
mymodel.opts.removeAll();
//push the new entries in
mymodel.opts.push.apply(mymodel.opts, loadOptions("<remoteaddress>"));

关于javascript - 异步 knockout observableArray 选择选项加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25978413/

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