对象[对象]没有方法'设置'

时间:2013-10-10 14:13:55

标签: javascript jquery kendo-ui kendo-mobile icenium

我正在通过Icenium Extension for Visual Studio使用Kendo UI Mobile。我对此非常陌生,但我磕磕绊绊。我在视图中编写了一个方法(称为popDataSource),该方法获取一些数据(读取文件夹中文件的名称)并返回这些文件名。如果我将它连接到按钮单击事件,该方法可以正常工作,但我真正想要的是在页面首次加载时调用该方法。我已经尝试设置data-show = popDataSource甚至data-after-show = popDataSource,但是当我这样做时,我得到错误Object [object Object]在我尝试返回数据时没有方法'set'。我也不是那种精通javascript的人,我肯定不会帮助我。

这是我的代码:

来自index.html的

代码段

<div id="tabstrip-listSonicImages" data-role="view" data-title="Sonic Images List"    data-model="app.listSonicImagesService.viewModel" 
    data-after-show="app.listSonicImagesService.viewModel.popDataSource">    
    <div data-role="content" class="view-content">
        <div data-role="scroller">
            <div class="buttonArea">
                <a id="btnShowList" data-role="button" data-bind="click: popDataSource" 
class="login-button">Display List</a>
            </div>
            <ul class="forecast-list" data-role="listview" data-bind="source: sonicImagesDataSource" data-template="sonic-image-list-template">
            </ul>
        </div>
    </div> 
</div> 

<script type="text/x-kendo-tmpl" id="sonic-image-list-template">
    <a data-role="listview-link" href="\#tabstrip-playSonicImage?fileName=${fileName}">${fileName}</a> 
</script>

listiconimages.js

(function(global) {
    var SonicImageListViewModel,
        app = global.app = global.app || {};

    SonicImageListViewModel = kendo.data.ObservableObject.extend({
        popDataSource: function () {
            var that = this;
            var listSI = new Array();

            try{
                window.requestFileSystem(LocalFileSystem.PERSISTENT, 0,
                    function (fileSys) {
                        fileSys.root.getDirectory("SIData", { create: true, exclusive: false},
                            function (dataDirEntry) {
                                var directoryReader = dataDirEntry.createReader ();
                                directoryReader.readEntries(
                                    function (entries) {
                                        var rows =  entries.length;
                                        for (i = 0; i < rows; i++) {
                                            var fName = entries[i].name;
                                            listSI[i] = { "fileName": fName, "image": "xxx" };
                                        }
                                    },
                                    function (error) {
                                        alert("error: " + error.code);
                                    }
                                );
                             },
                             null);
                         },
                         null
                     );

                    var dataSource = new kendo.data.DataSource(
                        {
                            data: listSI,
                            filter: { field: "fileName", operator: "endswith", value: ".simg" }
                        }
                    );

                    that.set("sonicImagesDataSource", dataSource);

                } catch (ex) {
                    alert(ex.message);
                }
            }
        });

        app.listSonicImagesService = {
            viewModel: new SonicImageListViewModel()
        };
    }
)(window);

app.js

(function (global) {
    var mobileSkin = "",
    app = global.app = global.app || {};

    document.addEventListener("deviceready", function () {
        app.application = new kendo.mobile.Application(document.body, { layout: "tabstrip-layout" });
    }, false);

    app.changeSkin = function (e) {
        if (e.sender.element.text() === "Flat") {
            e.sender.element.text("Native");
            mobileSkin = "flat";
        }
        else {
            e.sender.element.text("Flat");
            mobileSkin = "";
        }

        app.application.skin(mobileSkin);
    };
})(window)

正如我所说,我是Icenium和Kendo的新手,我的javascript知识有限,所以我不太清楚答案所在。任何帮助将不胜感激。

由于

0 个答案:

没有答案