KnockOutJS绑定问题
本文关键字:问题 绑定 KnockOutJS | 更新日期: 2023-09-27 18:25:48
我使用的是MVC4、jquery2.03和knockout2.30,无法查看依赖项总数。我是不是遗漏了什么?
型号
namespace eManager.Domain
{
public class Dependent
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int Age { get; set; }
}
}
查看
@model IEnumerable<eManager.Domain.Dependent>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>Total: <span data-bind="text: dependent().length"> </span> dependents(s)</p>
<script type="text/javascript">
var initialData = @Html.Raw(Json.Encode(Model));
var viewModel = {
dependent: ko.observableArray(initialData)
};
$(document).ready(function () { ko.applyBindings(viewModel); });
</script>
正如您从这个jsFiddle中看到的,您的敲除绑定很好:http://jsfiddle.net/pdavis68/k9rG9/
这意味着问题与您的initialData有关。在脚本中放入Razor语法很可能是个问题。您可以向控制器添加一个方法,该方法将数据作为字符串返回,然后使用$.getJSON()
调用来检索数据,然后填充视图模型(这就是我们的代码的操作方式)。
对于你的控制器,你可以有这样的东西:
[HttpGet]
public string GetDependents()
{
Dependent[] dependents = GetAllDependents();
return new JavaScriptSerializer().Serialize(dependents);
}
然后在您的Javascript中,类似于:
$.getJSON("http://mysite.com/controller/GetDependents", function(data) {
$.each(data, function(key, val) {
viewModel.dependent.push(val);
});
});
(这完全是我的想法,所以注意可能准确无误,但应该会让你接近)。
在我的控制器中添加了以下
[HttpGet]
public string GetDependents()
{
var dependents = _db.Dependents;
return new JavaScriptSerializer().Serialize(dependents);
}
查看
@model IEnumerable<eManager.Domain.Dependent>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>Total: <span data-bind="text: dependent().length"> </span> dependent(s)</p>
<script type="text/javascript">
$.getJSON("http://localhost:1233/Dependent/GetDependents", function (data) {
$.each(data, function (key, val) {
viewModel.dependent.push(val);
});
});
$(document).ready(function () { ko.applyBindings(viewModel); });
</script>
当我打电话的时候http://abc.xyz/Dependent/GetDependents我得到以下回复[{"RelationshipManager":{},"Id":1,"Name":"Tall Hat","Age":10},{"RelationshipManager":{}
但它仍然没有显示计数