Машинопись и ветерок, возвращающие наблюдаемый массив из запроса

Вопрос:

Я просто пытаюсь вернуть наблюдаемый массив из запроса breeze.js.

проблема

Как вернуть данные из запроса breeze js в качестве массива onservable, если я хочу вызвать его, используя вызов метода в машинописном машинописном тексте. Подробности: Функция getAllFileStructures (callback) не возвращает данные наблюдаемого массива в обещании. Я хочу вызвать запрос с бриза и вернуть данные. Я создал testgetAllFileStructures, чтобы продемонстрировать, что мне нужно, чтобы getAllFileStructures.

testgetAllFileStructures возвращает следующее

enter image description here

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);
}
}
}

Лучший ответ:

Я не эксперт в TypeScript, но вы нажимаете «Some TEST» в свои наблюдаемые, так что, конечно, это то, что будет возвращено. Вам нужно вернуть данные. Результаты из вашего запроса или сохранить их в наблюдаемом и вернуть это.

 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);
 }

Это вернет наблюдаемое заполнение ваших данных. Если вы пытаетесь пройти в наблюдаемом, а затем заполните его, вы сделаете это так:

 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, но это зависит от вас. По моему мнению, вы все еще можете определить свою модель представления после определения вашего TypeScript в стандартном JavaScript, но вам придется это понять!

Оцените статью
TechArks.Ru
Добавить комментарий