我有getGeneral
调用ajax GET的函数。当ajax接收数据(json)时,它将根据给定的json创建KO模型,并返回创建的KO。
创建敲除模型并分配值后,applybindings
应调用敲除。这是我的代码:
定义GeneralModel
和一些相关功能(在“ GeneralModel.js
” 内部):
var GeneralModel = function() {
//for now it is empty as data ar binded automatically from json
// CountryName is one of the properties that is returned with json
}
function getGeneral(pid) {
$.ajax({
url: "/api/general",
contentType: "text/json",
dataType: "json",
type: "GET",
data: { id: pid},
success: function (item) {
var p = new GeneralModel();
p = ko.mapping.fromJS(item);
return p;
},
error: function (data) {
}
});
}
这是从另一个文件(GeneralTabl.html)调用的,它应该调用get函数并applyBindings
更新UI:
var PortfolioGeneral = getGeneral("@Model.Id");
ko.applyBindings(PortfolioGeneral, document.getElementById("pv-portfolio-general-tab"));
但是,在这种情况下,我会收到错误消息(CountryName未定义)。这是因为applyBindings
发生在ajax返回数据之前,所以我正在对具有未定义属性的空模型进行applyBindings。
从Json到Model的映射在此处发生,并分配值:p = ko.mapping.fromJS(item);
我也可以在所有字段中填写GeneralModel,但这不是必需的(我想):
var GeneralModel = function() {
CountryName = ko.observable();
...
}
仍然会出现错误“ CountryName未定义”。
解决办法是什么?
1)我可以以某种方式进入getGeneral
内部GeneralModel
,因此获取数据将成为GeneralModel初始化的一部分吗?
要么
2)也许我应该以某种方式做“等待ajax结果”,然后才applyBindings
?
要么
我相信还有其他选择,我对KO和纯JS不太熟悉。
注意:我完全理解这是因为Ajax是Async调用,所以问题是考虑到我有两个单独的文件并且需要从外部调用getGeneral并应返回一些变量的情况下,如何重组此代码。
尝试使用返回的Promise接口:
function getGeneral(pid) {
return $.ajax({
url: "/api/general",
contentType: "text/json",
dataType: "json",
type: "GET",
data: {
id: pid
}
});
}
getGeneral("@Model.Id").done(function (item) {
var p = new GeneralModel();
p = ko.mapping.fromJS(item);
ko.applyBindings(p, document.getElementById("pv-portfolio-general-tab"));
}).fail(function () {
//handle error here
});
我正在使用模板绑定来呈现一组单选按钮。元素上还有一个css绑定。 单击单选按钮时,viewmodel http://jsfiddle.net/d3YJc/1/
我试图访问位于下的属性。所以基本上是一个数组,我要访问属性。 我得到以下错误。 无法处理绑定“text:function(){return process().parent[0].Id}” 无法读取未定义的属性“Id” 我尝试了以下不起作用的方法: 请帮助我如何访问ID。
我使用Knockout。我需要建立一些功能。我从来没用过击倒。 每个视图都有一个视图模型,该模型通过从主视图模型调用。 属性在初始化开始时初始化,并在视图中使用,没有问题。例如: 这样初始化,并在无容器绑定中正确使用,如下所示: 因此,我以相同的位置/方式初始化我的新属性: 并按如下方式使用: 并得到这个错误: 击倒。js:72未捕获引用错误:无法处理绑定“foreach:function(){r
我试图弄清楚如何使用knockout从html中添加和删除类。 应该发生的是,当我点击卡车时,按钮应该更新为btn红色,而car按钮应该删除btn红色。 我可以看到事件绑定正在工作,因为触发了警报并返回了正确的值,但我无法更新视图。 我编写了一个非常简单的JSFIDLE。net/N8GBB/11/(出于某种原因,stackoverflow不允许我发布链接)以下是我在JSFIDLE中使用的代码
问题内容: 我正在寻找一种方法来异步执行go中的两个函数,该函数返回不同的结果和错误,等待它们完成并打印两个结果。另外,如果一个函数返回错误,我不想等待另一个函数,只打印错误。例如,我具有以下功能: 这里https://play.golang.org/p/-8StYapmlg是我是如何实现它,但是它有太多的代码,我想。可以通过使用interface {}来简化它,但是我不想这样。我想要更简单的东西
我们如何等待IWebElement(重新)连接到DOM?我的场景是这样的,我从dropdown1中选择一个值,然后单击dropdown2上的数据绑定。所以当我的测试像从Dd1中选择“foo”,然后从Dd2中选择“bar”- 但是我真的不想把定位器字符串(“foo”)带到我的测试逻辑中,因为它似乎破坏了使用页面对象模型的意义。使用页面对象模型时,我已经有了IWebElement实例 那么,您知道隐式