0

フロントエンドとバックエンドに Appframework と Knockout js を使用して、Cordova/Phonegap アプリを作成しています。私が遭遇している問題は、最初に読み込まれたパネルのヘッ​​ダーで発生しています。

HTML:

<div id="afui">
    <div id="content">
        <!--CLASS LIST VIEW -->
        <div class="panel" title="Classes" id="classList" 
             data-footer="none" selected="true">
            <header>
                <div style="float:right" data-bind="click:addClass" 
                     class="button icon add white"></div>
                <h1>Classes</h1>
            </header>
            <ul class="list" data-bind="foreach: classes">
                <li data-bind="click:openClass, attr: { id: id, name: name }">
                    <a href="#categoryList">
                      <span style="padding-right:20px" data-bind="text: name">
                      </span>Grade:
                    </a>
                </li>
            </ul>
        </div>
        <!-- CATEGORY VIEW -->
        <div class="panel" id="categoryList" title="Class Name">
            <header>
                <a id="backButton" href="javascript:;" class="button" 
                   style="visibility: visible; ">Back</a>
                <h1 data-bind="text: header "></h1>
                 <div style="float:right" data-bind="click:addCategory" 
                      class="button icon add white">
                 </div>
            </header>
            <ul class="list" data-bind="foreach: categories">
                <li data-bind="text:name"></li>
            </ul>
        </div>
    </div>
</div>

id="classList"そのため、ヘッダーのボタンの最初のパネルではaddClass、クリック、タップ、またはその他の種類のユーザー操作がトリガーされません。
パネルへのリンクを含むリスト項目をタップしてid="categoryList"そのパネルに遷移すると、そのヘッダーの右上にあるイベント付きのボタンがclick:addCategory 機能します。

クリックイベントを発生させる唯一の方法はaddClass、モデルを初期化するときです...

ko.applyBindings(classModel, document.getElementById('classList'));
ko.applyBindings(categoryModel, document.getElementById('categoryList'));

classModelko バインディングの 2 番目のパラメーターを指定しないことによるものです。もちろん、これは問題になります。複数のビューがあり、各モデルが監視するコンテナーを指定する必要があるからです。

モデルを見る

クラスモデル:

function classInfo(name, id, parent) {
    var self = this;
    self.name = ko.observable(name);
    self.score = ko.observable('');
    self.id = ko.observable(id);

    self.openClass = function(data, event) {
        parent.currentClass(event.currentTarget.name);
    };
}

function classListViewModel() {
    var self = this;

    //class array object
    self.classes = ko.observableArray([]);

    //current class name
    self.currentClass = ko.observable().publishOn("currentClass");

    //remove a class from the model
    self.removeClass = function(obj) {
      //remove the class
    };

    //add a new class to the model
    self.addClass = function() {
        //add a new using classInfo object
    };
} 

それで、ここで何が起こっているのですか?Appframework がメイン ページのヘッダーに奇妙なことをして、click:addClassイベントが発生しない原因になっていますか?

どんな洞察/助けも大歓迎です、ありがとう!

4

0 に答える 0