我有一个从C#-ViewModel自动创建的淘汰模型:
的ViewModels:
public class SearchModel
{
public ActualLocationModel Location { get; set; }
}
public class ActualLocationModel
{
public string Address { get; set; }
}
search.js:
function Search(model) {
var self = this;
self._model = model;
ko.applyBindings(self._model, document.getElementById("searchForm"));
$('#submitButton').click(function () {
alert(self._model.ActualLocation.Address); // proof!
});
}
Search.cshtml:
@model ViewModels.SearchModel
<div id="searchForm">
<input data-bind="value: ActualLocation.Address" type="text">
<input type="submit" id="submitButton" value="Find" />
</div>
<script type="text/javascript">
$(function () {
window.search= new Search(@Html.Raw(Json.Encode(Model)));
});
</script>
因此,只要我手动输入值,数据绑定就会按预期工作。但在我的情况下地理位置会自动填充值。在这种情况下,绑定不会做它应该做的事情(输出总是null
)。有没有办法让Knockout数据绑定工作在自动填充输入上?
感谢您的帮助!
答案 0 :(得分:0)
好的,这里有相关的内容可以帮到你:
<script type="text/javascript">
$(function() {
window.search = new Search(JSON.parse('@Html.Raw(Json.Encode(Model))'));
});
</script>
注意我们正在解析转换为JSON的模型,因此我们可以在模型中使用生成的Javascript对象。如果你想直接从JSON到你的模型,考虑ko.mapping库,虽然不再积极维护,我相信。
<form id="searchForm">
<input data-bind="value: Location.Address" type="text">
<input type="submit" id="submitButton" value="Find" />
</form>
在此处,请注意从AdditionalLocation.Address
到Location.Address
的更改。
function Search(model) {
var self = this;
self._model = model;
ko.applyBindings(self._model, document.getElementById("searchForm"));
$('#submitButton').click(function () {
alert(self._model.Location.Address); // proof!
});
}
最后,我们会修正提醒以反映数据的形状(AdditionaLocation
到Location
)。
使用上述内容,一切都按预期方式运行。