我基本上有一个表单数据列表'每个都包含一个属性。 每个属性都有自己独立的数据,如ID,QuestionText等。
下面我有我的HTML,我的数据绑定了pageitems然后我正在设置' attributeid'作为表的id,一切正常。
我现在想要做的就是它说'$ root.getAttributeTitle()',我需要进行ajax调用以检索属性数据的属性数据'这是上面提到的,但每当我创建一个函数时,
self.getAttributeTitle = function(id){
var sTitle = '';
$.post(url, sendData, function(response){
sTitle = response.data.QuestionTitle;
});
return sTitle;
}
...它试图在ajax调用完成之前返回该值。
任何想法都会非常感激!
<!--ko foreach: pageitems-->
<table class="table" data-bind="attr: { id: $data.attributeid() }">
<tbody>
<tr>
<th colspan="2" data-bind="text: $root.getAttributeTitle($data.attributeid())"></th>
</tr>
<tr>
<td>
</td>
</tr>
</tbody>
</table>
答案 0 :(得分:0)
您应该延迟代码,直到Ajax调用完成,您不能指望您的代码立即从远程位置返回值。以下是如何更改getAttributeTitle函数的用法:
getAttributeTitle (id) {
var _this = this;
return $.post(url, sendData);
}
//then you can use it like this:
getAttributeTitle(id).done(function (response) {
console.log(response.data.QuestionTitle);
})
答案 1 :(得分:0)
您正在使用$ .post,这是$ .ajax的简写,它没有设置异步的选项。 Bu默认$ .post将考虑async = true,这导致在不等待响应的情况下运行到下一行。 你必须把
$.ajaxSetup({ asynch: false })
在$ .post之前,然后在最后再次启用
$.ajaxSetup({ asynch: true }).
希望有所帮助。
答案 2 :(得分:0)
不要绑定到数据获取函数调用,绑定到observable
的成员pageitems
,并在填充pageitems
时执行异步数据提取。 Knockout会在获得标题时填写标题。
您需要修改获取例程以填充observable,它可以很好地工作:
self.getAttributeTitle = function(id, observable){
$.post(url, sendData, observable);
}