0

我只是想从一个微风.js 查询中返回一个可观察的数组。

问题

如果我想使用 typescript 中的方法调用来调用它,我如何将来自微风 js 查询的数据作为 onservable 数组返回。详情:函数getAllFileStructures(callback) 没有返回promise中的observable数组数据。我想用微风调用一个查询并取回数据。我创建了 testgetAllFileStructures 来展示我想要 getAllFileStructures 做什么。

testgetAllFileStructures 返回以下内容

在此处输入图像描述

HTML

        <script src="~/Scripts/Custom/filerepo/filestructure.DataContext.js"></script>

    <script>

        function load() {
            var SimpleListModel2 = function () {
                var DbCtx = new DataContext.FileStructure("breeze/FileRepoBreeze/");
                this.items = DbCtx.testgetAllFileStructures();
//in a perfect world i would be able to change this to getAllFileStructures() and it will //just work.

        }.bind(this);  // Ensure that "this" is always this view model

            ko.applyBindings(new SimpleListModel2(), document.getElementById("test"));
        }

        window.onload = load;


    </script>



    <div id="test">
        <select multiple="multiple"  data-bind="options: items"> </select>
        </div>

打字稿文件

module DataContext {
    export class FileStructure {
        private EntityQuery: breeze.EntityQuery;
        private Manager: breeze.EntityManager;

        constructor(MainController: string) {
            //validate the format api/BreezeController/  
            this.EntityQuery = new breeze.EntityQuery;
            this.Manager = this.configureBreezeManager('breeze/FileRepoBreeze/');
        }
        private configureBreezeManager(MainController: string) {
            breeze.NamingConvention.camelCase.setAsDefault();
            return new breeze.EntityManager(MainController);
        }

         public getAllFileStructures(callback) {
             //define the query

            var query =
                this.EntityQuery
                    .from('GetAllFiles')
                    .using(this.Manager).execute()
                    .then(function (data) {
                        return callback(data);
                    })
                    .fail(this.queryFailed);
         }
        public testgetAllFileStructures (){

            var myObservableArray = ko.observableArray();    
            myObservableArray.push('Some TEST'); 
            return myObservableArray;
        }

         public queryFailed(error) {
             alert(error);
        }
    }
}
4

1 回答 1

1

我不是 TypeScript 方面的专家,但您正在将“一些测试”推送到您的 observable 中,所以这当然是要返回的。您需要从查询中返回 data.results 或将它们存储在 observable 中并返回。

 public getAllFileStructures() {
    var query =
        this.EntityQuery
            .from('GetAllFiles')
            .using(this.Manager).execute()
            .then(function (data) {
                var someObservable = ko.observableArray();
                return someObservable(data.results);
            })
            .fail(this.queryFailed);
 }

这将返回一个填充了您的数据结果的 observable。如果你试图传入一个 observable 然后填充它,你会这样做 -

 var myObservable = ko.observableArray();
 getAllFileStructures(myObservable);

 public getAllFileStructures(myObservable) {
    var query =
        this.EntityQuery
            .from('GetAllFiles')
            .using(this.Manager).execute()
            .then(function (data) {
                return myObservable(data.results);
            })
            .fail(this.queryFailed);
 }

至于为什么您在 HTML 中而不是在 TypeScript 类中定义脚本以及您正在使用它做什么,我无法帮助您。我建议将该视图模型逻辑移至您的 TypeScript 类,但这取决于您。根据我的理解,您仍然可以在标准 JavaScript 中的 TypeScript 定义之后定义您的视图模型,但您必须弄清楚这一点!

于 2013-07-06T16:50:55.840 回答