使用返回模式的嵌套循环

时间:2014-03-06 22:47:00

标签: javascript knockout.js

可以向我解释如何使用Return模式创建嵌套循环。

在下面的代码中,我返回一个'dialog'数组。对于对话框数组中的每个项目,我想调用我的'loadAnswers'方法,并向用户显示该对话框的可能答案列表。

目前我正在为每个对话框返回相同的答案集,这不是我想要的。我已经将'1000'硬编码到我的代码中,但它应该是data.DialogueID。

由于 熔体

my.vm = (function () { 
    dialog = ko.observableArray([]),
    answers = ko.observableArray([]),
    loaddialogueCallback = function (data) {
        data.forEach(function (data) {
            dialog.push(new my.Dialog1()
                 .dialogueId    (data.DialogueID)
                 .sortId        (data.SortID)
                 .picId         (data.CharacterID)
                 .picDesc       (data.CharacterDescription)
                 .pic           (data.CharacterPhoto)
                 .beforedialogue(data.BeforeDialogue)
                 .dialogue      (data.Dialogue)
                 .afterdialogue (data.AfterDialogue)
             );
        });
      },
   loadAnswersCallback = function (data) {
         data.forEach(function (data) {
             answers.push(new my.Answer()
              .answerid(data.AnswerId)
              .answer(data.Answer)
              .correct(data.Correct)
              );
         });
     },
   loadDialogue = function () {
        my.DataService.getDialogue(my.vm.loadDialogueCallback);
    },
   loadAnswers = function () {
        my.DataService.getAnswersList(1000,my.vm.loadAnswersCallback);
      };

    return {            
        Dialog: dialog,
        loadDialogueCallback: loadDialogueCallback,
        loadDialogue: loadDialogue,
        Answers:answers,
        loadAnswersCallback: loadAnswersCallback,
        loadAnswers:loadAnswers,     
    };      
})();

my.vm.loadAnswers();
my.vm.loadDialogue();

ko.applyBindings(my.vm);

我的观点

    <!-- Loop through Dialog  -->
    <div id="Dblock" data-bind='template: { foreach: Dialog, }'>
        <!-- Dialog Data is Here-->
        <!-- The Answers -->
        <span id="answers" data-bind='foreach:$root.Answers'>
            <a id="answer" data-bind='text:answer, click: function () { myanswer($parent.dialogue(),answer(),$parent.dialogueId()) }'></a>
        </span>
    </div>

1 个答案:

答案 0 :(得分:0)

我建议在您的Dialog对象中添加一个answers数组,并修改您的getDialogue服务以返回该对话框的答案,或者在对话框出来时拨打电话获取对话的答案。

您的答案将是:

    <span id="answers" data-bind='foreach: answers'>