0

ko.dataFor(this)ホットタオルテンプレートを使用して、マスター詳細のようなシナリオで、詳細ページにルーティングする関数に送信するために使用するセッションオブジェクトを取得しようとしていますが、ko.dataFor(this)何も提供しないか、おそらく (これは) 提供しません。 Breeze からの正しいデータが含まれていますか? 私の問題がビュー、モデル、または Breeze のさらに深いところにあるのかどうかはわかりません。

ビューは次のとおりです。

<section id="confschedule-view" class="view">
<h2 class="page-title" data-bind="text: title"></h2>
<header>
    <button class="btn btn-info btn-force-refresh pull-right" data-bind="click: refresh">
        <i class="icon-refresh"></i>
    </button>
    <div class="article-counter">
        <span data-bind="text: sessions().length"></span>sessions in this conference.
    </div>
</header>

<section data-bind="foreach: sessions()" class="view-list" id="view-list">
    <article class="list-item">
        <div class="session-brief" title="Go to session details">
            <h3 data-bind="text: title"></h3>
            <div class="session-starttime">
                <span data-bind="text: moment.utc(startTime()).format('dddd h:mm a')" class="session-starttime"></span>
                &nbsp;-&nbsp;
                <span data-bind="text: sessions_Rooms().sessions_Venues().venue"></span>
                <span data-bind="text: sessions_Rooms().room"></span>
            </div>
            <div data-bind="foreach: sessions_CliniciansInSessions()">
                <div class="clinician-name">
                    <span data-bind="text: sessions_Clinicians().firstName"></span>
                    <span data-bind="text: sessions_Clinicians().lastName"></span>
                </div>
            </div>
            <span data-bind="text: sessionID"></span>
        </div>
    </article>
</section>
</section>

ビューモデルで呼び出される関数は次のとおりです(編集:ビューモデル全体です):

define(['services/logger', 'services/datacontext', '../Scripts/knockout-2.2.1.js', 'durandal/plugins/router'],
function (logger, datacontext, ko, router) {

    var sessions = ko.observableArray();

    function activate() {
        logger.log('Conference Schedule Activated', null, 'confschedule', true);
        return datacontext.getSessionPartials(sessions, false);
    }

    function refresh() {
        return datacontext.getSessionPartials(sessions, true);
    }


    var viewAttached = function (view) {
        //This is called when the view loads and the DOM is ready for jQuery
        logger.log('viewAttached called.  View:' + view.id.toString(), null, 'confschedule', true);
        bindEventToList(view, '.session-brief', gotoDetails, 'click');
    }

    var bindEventToList = function (rootSelector, selector, callback, eventName) {
        logger.log('bindEventToList Called', null, 'confschedule', true);
        var eName = eventName || 'click';
        $(rootSelector).on(eName, selector, function () {   
            var session = ko.dataFor(this);
            if (session)
                logger.log('[ko.dataFor(this)] got the session data', session, 'confschedule', true);
            else
                logger.log('[ko.dataFor(this)] got nothing!!!', session, 'confschedule', true);
            callback(session);
            return false;
        });
    }

   var gotoDetails = function (selectedSession) {
        logger.log('gotoDetails called.', selectedSession, 'confschedule', true);
        if (selectedSession && selectedSession.sessionID) {
            var url = '#/sessiondetail/' + selectedSession.sessionID;
            router.navigateTo(url);
        }
    }

    var vm = {
        activate: activate,
        sessions: sessions,
        title: 'Conference',
        refresh: refresh,
        viewAttached: viewAttached
    };

    return vm;
});

すべてのデータは Breeze から読み込まれますが、div をクリックすると、

var session = ko.dataFor(this);

常に undefined を返します。$(this).textの内容をログに記録するだけ<div>なので、何かがあります。

4

1 に答える 1

3

モジュール定義でノックアウトをロードしていることに気付きました。これにより、ノックアウトの 2 回の読み込みで問題が発生する可能性があります。1 回目は index.cshtml (テンプレートと同様)、次にモジュールです。モジュール定義でノックアウト参照を削除してみてください。

于 2013-10-30T02:02:30.367 に答える