te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - .datepicker call inside of Durandal activate function not working - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - .datepicker call inside of Durandal activate function not working - Stack Overflow

programmeradmin3浏览0评论

I'm Composing this in a view, then trying to call .datepicker() on the result, but nothing happens.

The pose container

<div>
<!--ko pose: { model:'viewmodels/schedule', view: 'views/schedule.html', activate:true} -->
<!--/ko-->
</div>

schedule.html

<div class="schedule-editor">

</div>

And the schedule module

define([], function () {
    var vm = {
        activate: activate,
    };
    return vm;

    function activate() {
        $('.schedule-editor').datepicker();
        console.log("activated schedule module");
        return true;
    }
});

Console logs "activated schedule module", but the datepicker is not created. If I go to the chrome console and run the jQuery call, $('.schedule-editor').datepicker(); it brings up the datepicker just fine.

The Durandal docs claim that the activate function is called after the DOM is full posed, so I don't know what else to try.

I'm Composing this in a view, then trying to call .datepicker() on the result, but nothing happens.

The pose container

<div>
<!--ko pose: { model:'viewmodels/schedule', view: 'views/schedule.html', activate:true} -->
<!--/ko-->
</div>

schedule.html

<div class="schedule-editor">

</div>

And the schedule module

define([], function () {
    var vm = {
        activate: activate,
    };
    return vm;

    function activate() {
        $('.schedule-editor').datepicker();
        console.log("activated schedule module");
        return true;
    }
});

Console logs "activated schedule module", but the datepicker is not created. If I go to the chrome console and run the jQuery call, $('.schedule-editor').datepicker(); it brings up the datepicker just fine.

The Durandal docs claim that the activate function is called after the DOM is full posed, so I don't know what else to try.

Share Improve this question asked Mar 22, 2013 at 21:04 Kal_TorakKal_Torak 2,5511 gold badge21 silver badges42 bronze badges 1
  • 3 Try to put your jQuery logic into a viewAttached method instead of the activate method. – nemesv Commented Mar 22, 2013 at 21:18
Add a ment  | 

2 Answers 2

Reset to default 11

Like nemesv mentioned you should use viewAttached instead.

define([], function () {
    var vm = {
        viewAttached: viewAttached,
    };
    return vm;

    function viewAttached(view) {
        $(view).find('.schedule-editor').datepicker();
        console.log("activated schedule module");
        return true;
    }
});

Activate happens in the lifecycle before your model has been data-bound to the new view and before the view has been added to the dom. viewAttached happens after the view has been data-bound to your model and attached to the dom.

EDIT

Durandal 2.0 has renamed viewAttached to attached

There is another approach to this that stays true to the declarative UI philosophy that knockout.js and durandal are striving for.

It will allow you to declare the datepicker within the HTML like this:

<div class="schedule-editor" data-bind="
    jqueryui: { 
        widget: 'datepicker', 
        options: { 
            // you can set options here as per the jquery ui datepicker docs
        } 
    }">

</div>

Simply include the jquery ui widget bindings found in this gist: https://github./SteveSanderson/knockout/wiki/Bindings---jqueryui-widgets

Make sure you include the above javascript after you have loaded jquery, jquery ui and knockout.

发布评论

评论列表(0)

  1. 暂无评论