Javascript KnockoutJS:显示HTML-填充HTML
我需要用KnockoutJS实现一个有趣的效果。假设我有一个最简单的模型:Javascript KnockoutJS:显示HTML-填充HTML,javascript,ajax,knockout.js,Javascript,Ajax,Knockout.js,我需要用KnockoutJS实现一个有趣的效果。假设我有一个最简单的模型: var项=函数(){ var self=这个; self.title=ko.可观察(“”); };这行代码显然是错误的: self.list().push(data.results[0].title); 应该是: value.title(data.results[0].title); 这行代码显然是错误的: self.list().push(data.results[0].title); 应该是: value.t
var项=函数(){
var self=这个;
self.title=ko.可观察(“”);
};代码>这行代码显然是错误的:
self.list().push(data.results[0].title);
应该是:
value.title(data.results[0].title);
这行代码显然是错误的:
self.list().push(data.results[0].title);
应该是:
value.title(data.results[0].title);
下面是一个假设的示例:
- 有一个调用告诉我们最终将渲染多少个项目
- 对于这些项中的每一项,都需要完成一个调用来呈现实际的UI
我让各个项目负责自己加载数据。这使得将接收到的数据(可以以任何顺序返回)写入相应的列表项变得更加容易
您将看到UI呈现的步骤:
检索用于呈现初始列表的数据的调用正在加载:显示常规加载消息
我们为要检索的每个项目创建了一个列表项。所有项目都已开始数据加载,但在加载完成之前,将显示加载状态
一个接一个地,单个数据加载完成,列表元素接收其内容
const{getproductidsaync,getProductAsync}=apiMethods();
功能项(id){
this.name=ko.observable(空);
this.load=ko.pureComputed(()=>!this.name());
getProductAsync(id).then(this.name);
};
Item.fromId=id=>新项目(id);
函数列表(){
this.items=ko.observearray([]);
this.load=ko.pureComputed(()=>!this.items().length);
GetProductIDAsync()
.then(ids=>ids.map(Item.fromId))
.然后(这个项目);
}
应用绑定({list:new list()});
//模拟某些异步API,与以下问题无关:
函数apiMethods(){
常量productCatalogDB={
1:“苹果”,
2:“橙子”,
3:“香蕉”
};
常数延迟=(f,minT,maxT)=>
(…args)=>
新承诺(res=>{
设置超时(
()=>res(f(…args)),
minT+Math.random()*(maxT-minT)
)
});
返回{
GetProductIDAsync:延迟(
()=>Object.keys(productCatalogDB),5001200),
getProductAsync:延迟(
id=>productCatalogDB[id],5001500)
};
}
。正在加载{
不透明度:.6;
}
正在加载目录ID。。。
-
以下是一个假设:
- 有一个调用告诉我们最终将渲染多少个项目
- 对于这些项中的每一项,都需要完成一个调用来呈现实际的UI
我让各个项目负责自己加载数据。这使得将接收到的数据(可以以任何顺序返回)写入相应的列表项变得更加容易
您将看到UI呈现的步骤:
检索用于呈现初始列表的数据的调用正在加载:显示常规加载消息
我们为要检索的每个项目创建了一个列表项。所有项目都已开始数据加载,但在加载完成之前,将显示加载状态
一个接一个地,单个数据加载完成,列表元素接收其内容
const{getproductidsaync,getProductAsync}=apiMethods();
功能项(id){
this.name=ko.observable(空);
this.load=ko.pureComputed(()=>!this.name());
getProductAsync(id).then(this.name);
};
Item.fromId=id=>新项目(id);
函数列表(){
this.items=ko.observearray([]);
this.load=ko.pureComputed(()=>!this.items().length);
GetProductIDAsync()
.then(ids=>ids.map(Item.fromId))
.然后(这个项目);
}
应用绑定({list:new list()});
//模拟某些异步API,与以下问题无关:
函数apiMethods(){
常量productCatalogDB={
1:“苹果”,
2:“橙子”,
3:“香蕉”
};
常数延迟=(f,minT,maxT)=>
(…args)=>
新承诺(res=>{
设置超时(
()=>res(f(…args)),
minT+Math.random()*(maxT-minT)
)
});
返回{
GetProductIDAsync:延迟(
()=>Object.keys(productCatalogDB),5001200),
getProductAsync:延迟(
id=>productCatalogDB[id],5001500)
};
}
。正在加载{
不透明度:.6;
}
正在加载目录ID。。。
-
是的,这确实是个错误。但是对于这个问题的解决方案,你能说些什么呢?如果不知道你的期望是什么,以及它的表现如何,我就无能为力。仅仅说“不行”是不够的。不是说不行,而是我不知道怎么做。我需要在加载文档后将其视为空HTML块。它们只有在使用Ajax加载数据后才会被填充。我看不出您的代码中还有什么不合适的地方,但也许我不明白您遇到了什么问题。是的,这确实是一个错误。但是对于这个问题的解决方案,你能说些什么呢?如果不知道你的期望是什么,以及它的表现如何,我就无能为力。仅仅说“不行”是不够的。不是说不行,而是我不知道怎么做。我需要在加载文档后将其视为空HTML块。只有在使用Ajax加载数据后,才会填充它们。我看不出您的代码中还有任何不合适的地方,但可能我不明白您遇到了什么问题。请原谅我花了这么长时间来回答。你给出了一个惊人的、详尽的答案。非常感谢你。你在解决我的问题上帮了我很多。请原谅我花了这么长时间回答。你给出了一个惊人的、详尽的答案。多谢各位