标签: durandal

Breezejs EntityManager MetadataStore和fetchEntityByKey

我有一个SPA应用程序(durandaljs),我有一个特定的路由,我映射我想要获取的实体的"id".

模板是"/#/ todoDetail /:id".

例如,"/#/ todoDetail/232"或"/#/ todoDetail/19".

在viewmodel的激活功能上,我得到了路由信息,所以我可以获取id.然后我创建了一个breezejs EntityManager的新实例来获取具有给定id的实体.

问题是当我调用manager.fetchEntityByKey("Todos",id)时,EntityManager还没有来自服务器的元数据,所以它抛出异常"无法通过名称找到'Type':Todos".

只有在调用fetchEntityByKey之前首先对存储(manager.executeQuery)执行查询时,它才有效.

这是预期的行为还是错误?在实例化EntityManager期间有没有办法自动生成元数据?

注意:我认为在我的情况下很难使用共享的EntityManager,因为我想允许用户直接在浏览器上键入路由.

编辑:作为临时解决方法,我这样做:

BreezeService.prototype.get = function (id, callback) {
    var self = this;

    function queryFailed(error) {
        app.showMessage(error.message);
        callback({});
    }

    /* first checking if metadatastore was already loaded */

    if (self.manager.metadataStore.isEmpty()) {
        return self.manager.fetchMetadata()
        .then(function (rawMetadata) {
            return executeQuery();
        }).fail(queryFailed);
    } else {
        return executeQuery();
    }

    /* Now I can fetch */
    function executeQuery() {
        return self.manager.fetchEntityByKey(self.entityType, id, true)
                        .then(callback)
                        .fail(queryFailed);
    }
};
Run Code Online (Sandbox Code Playgroud)

breeze durandal

5
推荐指数
1
解决办法
5038
查看次数

Durandal/Knockout模板绑定不插入

我目前正在尝试将表格行<tr>模板传播到<tbody>标记中.这是一个例子:

HTML:

<table>
    <tbody data-bind="template: { name : 'tableTemplate', foreach : tableRow }">
    </tbody>
</table>
<script type="text/html" id="tableTemplate">
    <tr>
        <!-- First Name -->
        <td data-bind="text: firstName"></td>
        <!-- Last Name -->
        <td data-bind="text: lastName"></td>
    </tr>                        
</script>
Run Code Online (Sandbox Code Playgroud)

DurandalJS:

define(function(require) {
    var self = this;
    self.app = require('durandal/app');

    return {
       tableRow: ko.observableArray([
           { firstName: "DemoFirstName" , lastName: "ExampleLastName" },
           { firstName: "ExampleFirstName", lastName: "DemoLastName" }
       ]);

    //viewAttached and other non-applicable console log functions here
    };
});
Run Code Online (Sandbox Code Playgroud)

HTML中的所有内容都将正确地进行数据绑定,直到它到达表中; 所有数据绑定事后都会死亡.

我对Durandal很新,我正在学习.

knockout.js durandal

5
推荐指数
2
解决办法
2960
查看次数

使用HotTowel(Durandal框架)+ VS2012翻译视图

我用Durandal和Breeze开发了一个ASP.NET MVC解决方案.我需要将前端翻译成法语和荷兰语.如何进行Durandal /淘汰赛?

在经典的ASP.NET MVC解决方案中,我们有机会将视图呈现在服务器端(感谢razor).

谢谢你的帮助.

asp.net asp.net-mvc breeze durandal hottowel

5
推荐指数
1
解决办法
1580
查看次数

使用breeze执行选择并在同一查询中展开不受支持

我用Durandal/breeze开发了一个asp.net解决方案.

这是我的代码,以获取我的所有托运人:

var query = EntityQuery.from('Shippers')
               .select('id, name, street, city');

return manager.executeQuery(query)
        .then(querySucceeded)
        .fail(queryFailed);
Run Code Online (Sandbox Code Playgroud)

这是相关的模型:

public class Shipper
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Street { get; set; }
    public string Number { get; set; }
    public City City { get; set; }
}

public class City
{
    public int Id { get; set; }        
    public string Name { get; set; }
    public string PostCode { get; set; …
Run Code Online (Sandbox Code Playgroud)

breeze durandal

5
推荐指数
1
解决办法
1906
查看次数

有没有办法在TypeScript模块中访问"导出"对象?

我正在尝试使用durandal,我需要getModuleId通过传递当前模块.我的问题是,当我使用TypeScript时,从AMD模块返回的底层对象似乎无法通过Typescript代码访问:

export function checkModule(){
       var a = system.getModuleId(??);
}
Run Code Online (Sandbox Code Playgroud)

编译后的TS将转换为:

function checkModule(){
     var a = system.getModule(??);
}
exports.checkModule = checkModule;
Run Code Online (Sandbox Code Playgroud)

而不是??我需要传递exports在编译TS中定义的对象.无论如何要做到这一点还是有一个简单的方法?谢谢

typescript durandal

5
推荐指数
1
解决办法
2621
查看次数

使用childRouter时的Durandal路由器/生命周期事件

在使用Durandal构建的单页应用中,我有一个设置视图,具有不同的部分.我使用childRouter来解析不同的部分.

在这个应用程序中,许多代码都与Durandal使用的组合生命周期事件挂钩.例如,这个自定义绑定:

ko.bindingHandlers.autoFocus = {
    init: function (element) {
        var $element = $(element),
            setFocus = function () {
                $element.focus();
            };

        router.on('router:navigation:composition-complete', setFocus);
        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            router.off('router:navigation:composition-complete', setFocus);
            $element = null;
        });
    }
};
Run Code Online (Sandbox Code Playgroud)

到目前为止,此自定义绑定已完美运行,将焦点设置为在显示视图时应用绑定的字段.

但是,使用子路由器,时间关闭.似乎主路由器在'router:navigation:composition-complete'加载"设置"视图时触发事件.此时,尚未显示子视图,并且具有自动聚焦绑定的元素无法获得焦点.当在设置页面之间导航时更清楚地说明这一点:在离开页面时,在旧子视图上具有自动聚焦绑定的字段获得焦点,然后显示新的子视图而没有聚焦元素.

有没有办法让子路由器也省略事件?或者可能让主路由器推迟事件直到子路由器完成?

我还读到这也适用于组合的其他阶段:例如,不会在子视图的viewmodel上调用deactivate回调.因此,在子路由器上触发事件的一般修复将是我正在寻找的理想解决方案.

提前致谢.

knockout.js durandal durandal-2.0

5
推荐指数
1
解决办法
2470
查看次数

Durandal 2.0自定义对话框

我希望创建一个Durandal自定义对话框,在现有的可组合视图模型周围添加带有标题和页脚的窗口框架.

我制作了customModal.html模板

<div class="messageBox">
    <div class="modal-header">
        <h3 data-bind="text: title"></h3>
    </div>
    <div class="modal-body">
        <!--ko compose: { model: model, template: view }-->
        <!--/ko-->
    </div>
    <div class="modal-footer" data-bind="foreach: options">
        <button class="btn" data-bind="click: function () { $parent.selectOption($data); }, text: $data, css: { 'btn-primary': $index() == 0, autofocus: $index() == 0 }"></button>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

如您所见,我希望在customModal模板的主体内构建一个viewmodel.这样传入的视图模型不依赖于模态显示,但可以轻松使用.

我已经制作了一个这样的customModal.js模型:

define(['plugins/dialog'], function (dialog) {
    var CustomModal = function (title, model, view, options) {
        this.title = title;
        this.model = model;
        this.view = view;
        this.options = options;
    };

    CustomModal.prototype.selectOption = function …
Run Code Online (Sandbox Code Playgroud)

modal-dialog knockout.js durandal durandal-2.0

5
推荐指数
1
解决办法
4244
查看次数

SPA初始加载时间

SPA的缺点当然是初始加载时间.

例如,我用Durandal创建了AskACarPro.com.

它在加载时当前有一个"加载"屏幕.但我想也许这是一个坏主意.这让我想起了一个全闪存的网站 - 非常漂亮,但没有人想在他们第一次到达网站时观看加载微调器.

我随机发现的另一个例子是MyBestEgg.com它是一个Angular网站.没什么特别的,但是我的机器上的冷加载时间差不多是6秒.

但它没有飞溅,所以屏幕在加载时会跳跃一下.我不知道这比闪屏更好.

处理不可避免的SPA加载时间是否有最佳实践?显然应该尽可能捆绑和缩小应用程序,但应用程序启动时总是会有延迟.

这可能更像是设计师类型的问题,而不是编程问题.然而,重要的是因为负载因素是不使用SPA的原因.

angularjs single-page-application durandal

5
推荐指数
1
解决办法
2447
查看次数

如何在停用后丢弃Durandal中的视图模型

我正在使用durandal和requirejs来构建我的视图模型.deactivate每次我离开视图时,我也会进入组合生命周期回调方法.我想在这个方法中处理我的viewmodel.

我试过了delete this,this = undefined但它们似乎没有用.

我也使用这样的durandal事件聚合器:

self.activate = () => {
        App.trigger("testEvent");
    };

    App.on("testEvent").then(() =>
    {
        alert('Event Triggered!');
    });
Run Code Online (Sandbox Code Playgroud)

因此,每次加载视图模型时,都会触发事件.现在,如果我离开视图,然后导航回来(因此视图模型将再次加载),然后事件将被触发两次.如果我第三次导航到视图,事件将被触发3次,依此类推.所以之前的视图模型仍然存在,这就是每个视图模型触发durandal事件的原因.因此,要解决此问题,我需要在停用时处置viewmodels,我该怎么做?

注意.有问题的视图模型是瞬态的,而不是单例.

javascript durandal

5
推荐指数
1
解决办法
528
查看次数

Gulpfile.js无法加载

Visual Studio任务运行器无法加载gulp文件.我现在使用的是VS2017 v15.9.4,但该项目是在几年前开发的.

Failed to run "...\Gulpfile.js"...
cmd.exe /c gulp --tasks-simple
assert.js:350
    throw err;
    ^
AssertionError [ERR_ASSERTION]: Task function must be specified
    at Gulp.set [as _setTask] (...\node_modules\undertaker\lib\set-task.js:10:3)
    at Gulp.task (...\node_modules\undertaker\lib\task.js:13:8)
    at Object.<anonymous> (...\gulpfile.js:34:6)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
Run Code Online (Sandbox Code Playgroud)

我用"......"替换了我的项目本地地址

npm -v --> 6.4.1

node -v --> 10.14.2

gulp -v --> CLI version 2.0.1
            Local version 4.0.0
Run Code Online (Sandbox Code Playgroud)

package.json文件的内容:

{
  "version": "1.0.0",
  "name": …
Run Code Online (Sandbox Code Playgroud)

javascript node.js npm durandal gulp

5
推荐指数
1
解决办法
1362
查看次数