我只是想从breeze.js查询中返回一个可观察的数组。
如果我想使用typescript中的方法调用来调用它,那么如何将breeze js查询中的数据作为onservable数组返回。 详细信息:函数getAllFileStructures(callback)不返回promise中的可观察数组数据。我想用breeze调用一个查询并获取数据。我创建了testgetAllFileStructures来展示我想要的getAllFileStructures。
<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);
}
}
}
答案 0 :(得分:1)
我不是TypeScript的专家,但是你正在将'Some TEST'推送到你的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然后填充它,你会这样做 -
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定义之后定义你的视图模型,但你必须想出那个!