【问题标题】:Knockout mapping plugin trouble getting binding properties敲除映射插件无法获取绑定属性
【发布时间】:2014-01-21 05:51:54
【问题描述】:

我试图结合敲除映射插件来理解敲除。

我有一个 asp.net MVC 应用程序返回一个模型(一组客户)。

我的控制器:

Public ActionResult Index()
{
    List<Customer> customers = new List<Customer>{
         .....initializing-code for the customerlist

         };
    return View(customers);
}

在我看来,我有一个脚本如下:

<script type="text/javascript">
    function ViewModel() {
        var self = this;
    };

    var myViewModel;

    $(function() {
        var jsonModel = '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model, new Newtonsoft.Json.Converters.IsoDateTimeConverter()))';
        myViewModel = ko.mapping.fromJSON(jsonModel, {}, new ViewModel());
        ko.applyBindings(myViewModel);
    });

</script>

我想使用 foreach 进行控制流绑定......这个 foreach 绑定的变量名是什么。我尝试了“$data”,但这似乎不起作用。

亲切的问候

相关查看代码:

<div class="row" data-bind="foreach: customers">
    <div class="col-md-2">
    <span data-bind="text: Name"></span>
</div>
<div class="col-md-2">
    <span data-bind="text: FirstName"></span>&nbsp;<span data-bind="text: LastName"></span>
</div>
<div class="col-md-2">
    <span data-bind="text: ContactStreet"></span>&nbsp;<span data-bind="text: ContactBuildingNumber"></span>
</div>
<div class="col-md-2">
    <span data-bind="text: ContactPostalCode"></span>
</div>
<div class="col-md-2">
    <span data-bind="text: ContactCity"></span>
</div>
<div class="col-md-2">
    <button class="btn btn-success">Edit</button>
    <button class="btn btn-danger">Delete</button>
</div>

@section scripts{
@Scripts.Render("~/bundles/knockout")
<script type="text/javascript">
    function ViewModel() {
        var self = this;


    };

    var myViewModel = {};

    $(function() {
        var jsonModel = '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model, new Newtonsoft.Json.Converters.IsoDateTimeConverter()))';
        myViewModel.customers = ko.mapping.fromJSON(jsonModel, {}, new ViewModel());
        ko.applyBindings(myViewModel);
    });

</script>

【问题讨论】:

    标签: asp.net-mvc knockout.js knockout-mapping-plugin


    【解决方案1】:

    你有它,你可以像这样绑定它

    <div data-bind="foreach: $root">
        <span data-bind="text: Name"></span> 
        ... etc ...
    </div>
    

    但是,我会这样做

    var myViewModel = {};
    
    $(function() {
        var jsonModel = '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model, new Newtonsoft.Json.Converters.IsoDateTimeConverter()))';
        myViewModel.customers = ko.mapping.fromJS(jsonModel);
        ko.applyBindings(myViewModel);
    });
    

    然后你可以输入你的标记

    <div data-bind="foreach: customers">
        <span data-bind="text: Name"></span> 
        ... etc ...
    </div>
    

    因为现在您可以向视图模型添加更多属性,您肯定会需要这些属性。

    更新Here's a working jsfiddle。记住电话是fromJS,而不是fromJSON

    【讨论】:

    • 我试过你的回答,这似乎是合乎逻辑的。但是与使用 'foreach: $data' 绑定会出现同样的问题。我将发布完整视图代码。也许是错字?
    • 顺便说一句:没有控制台错误(使用chrome开发工具)
    • 好吧,我有点担心 :)。别人做了。我更新了答案的“但是”部分。您不需要 ViewModel 构造函数模式,只需让 ko 创建映射的视图模型。
    • 如果不行我们需要去jsfiddle,你能把它放在jsfiddle上吗?我会得到它的工作
    • 没有与 jsfiddle 一起工作,所以希望我以正确的方式做到了:jsfiddle.net/Speedy7912/ZUU6D/2(更新 2 包括 jquery)
    猜你喜欢
    • 2013-06-01
    • 2012-07-20
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 2013-09-22
    • 2014-07-07
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多