无法使用“data-bind=source:”将 Kendo Mobile ListView 绑定到数据

Posted

技术标签:

【中文标题】无法使用“data-bind=source:”将 Kendo Mobile ListView 绑定到数据【英文标题】:Unable to bind a Kendo Mobile ListView to data using "data-bind=source:" 【发布时间】:2013-01-16 16:00:00 【问题描述】:

我正在尝试将列表视图绑定到 ViewModel。我已将一些硬编码数据放入代码中,以确保 Web 服务不会出现问题。我没有看到任何控制台错误,所以我不知道如何解决这个问题。

理想情况下,我希望有尽可能多的代码来处理在 ViewModel 中获取数据,并且我希望尽可能接近您应该使用 KendoUI Mobile 框架的方式。

html

<div data-role="view" id="contactView" data-model="ContactViewModel" data-init="dataInit">
    <h1 id="ContactHallo">Contact Screen</h1>
    <ul id="contactDetailList" 
        data-role="listview" 
        data-style="inset" 
        data-template="contactDetailtemplate" 
        data-bind="source: rdata">
    </ul>
</div>

javascript

 var ContactViewModel = kendo.observable(
         rdata: null,

         loadData: function () 
             var testData = [
                                
                                    AssociatedContactType: "n\/a",
                                    AssociatedProperties: [],
                                    EmailAddress: "n\/a",
                                    FName: "User1",
                                    HomeNumber: "n\/a",
                                    LName: "LastName",
                                    MobileNumber: "+27 21 0823219213",
                                    WorkNumber: "n\/a"
                                ];
             var loadedData = new kendo.data.DataSource.create( data: testData );
             loadedData.read();

             this.rdata = loadedData;
         
     );

     function dataInit() 
         ContactViewModel.loadData();
     

     var app = new kendo.mobile.Application($(document.body));

模板

<div>
    <h4>Added Record</h4>
    <a href="tel:#:data.MobileNumber#">#:data.MobileNumber#</a>
</div>

【问题讨论】:

【参考方案1】:

知道为什么有人对原始问题投了反对票会很有趣..

我在我的一篇博文中对此进行了介绍:Kendo Mobile Gotchas, Tips, and Tricks。

MVVM 数据绑定实际上发生在之前 init 事件,所以当绑定发生时你的ContactViewModel.rdata 仍然是null。但是,我认为如果您在设置 rdata 时正确调用 .set(),它可能会解决您的问题:

loadData: function () 
    ...
    this.set('rdata', loadedData);

自从rdata 被设置后,该集合应该触发 ListView 更新。


如果这不起作用,那么您可能会变得非常棘手并将 MVVM 数据绑定延迟到 init 事件,方法是自己执行而不是声明式使用 data-model

为此,您将从视图中删除 data-model= 属性,而是在init 函数的末尾手动调用kendo.bind(),如下所示:

<div data-role="view" id="contactView" data-init="dataInit">

function dataInit(initEvt) 
    ContactViewModel.loadData();
    kendo.bind($(initEvt.view.element), ContactViewModel, kendo.mobile.ui);

【讨论】:

以上是关于无法使用“data-bind=source:”将 Kendo Mobile ListView 绑定到数据的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI 网格 URL 列

kendo ui中的Mvvm下拉列表

无法使用 customSchema 将 RDD 转换为 DF

无法使用 Python 将 EMF 插入 Word

无法使用 SLComposeViewController 将图像发布到 Facebook?

无法使用 Postgresql 将 JDBC 连接到 sonarqube