标签: durandal

多个SPA的Durandal和MVC4区域

我有一个带有区域的互联网应用程序mvc4,对于我的组织,每个区域代表一个SPA,通过"管理NuGet包",我安装了"Durandal 1.2.0","Durandal Transitions 1.2.0"和"Durandal Router 1.2.0".我组织了文件夹并退出Durandal文件夹"App"中的"views"和"viewmodels",并将新视图放在mvc4区域的文件夹"VIews"中,例如:

领域 - > NewArea - >查看 - > ControllerFolder - >视图 - > shell.html

然后我将'"viewmodels"放在"Script"文件夹中,例如:

脚本 - > NewArea - > ControllerFolder - >的ViewModels - > shell.js

脚本 - > NewArea - > ControllerFolder - > main.js

然后我改变了durandal JS的路径,例如在main.js中:

define(['../../../App/durandal/app',
    '../../../App/durandal/viewLocator',
    '../../../App/durandal/system',
    '../../../App/durandal/plugins/router',
    '../../../App/services/logger'],
Run Code Online (Sandbox Code Playgroud)

我在下一行改变了main.js:

viewLocator.useConvention('viewmodels', '../Areas/NewArea/Views/ControllerFolder/views');
Run Code Online (Sandbox Code Playgroud)

但是文件夹的配置失败,因为下一行在其定义中调用了模块"viewLocator"的不同时间,并使用默认值重写"useConvention"的配置:

app.setRoot('viewmodels/shell', 'entrance');
Run Code Online (Sandbox Code Playgroud)

仅当文件夹"views"和"viewmodels"不在"Durandal"的"App"文件夹下时才会发生这种情况.

请帮助我,如何在同一个项目中拥有各种SPA?

javascript asp.net-mvc-areas asp.net-mvc-4 durandal

6
推荐指数
2
解决办法
2833
查看次数

KO找不到带ID的模板

我之前使用过Knockout模板,所以我不确定为什么这对我不起作用.我尝试了两种不同风格的ko标记,但都没有工作.

<!-- more nesting levels -->
<div class="cal-day-tps" data-bind="foreach: timePeriods">
    <div class="cal-day-tp-cont">

        <div data-bind="template: { name: 'tp-ed-templ', data: $data }"></div>

        //both of these methods fail
        <!-- ko template: { name: 'tp-ed-templ', data: $data } -->
        <!-- /ko -->

    </div>
</div>    
<!-- /more nesting levels -->


<script type="text/html" id="tp-ed-templ">
 <!-- bunch of markup -->
</script>
Run Code Online (Sandbox Code Playgroud)

我刚收到错误"无法找到ID为tp-ed-templ的模板".

可能只是一个错字,但我一直无法找到它.

这似乎是Durandal的一个问题,而不是Knockout.

我在vanilla durandal设置中尝试了一些非常简单的案例,它仍然做同样的事情.甚至尝试将脚本放在与绑定相同的嵌套位置,没有骰子.

javascript knockout.js durandal

6
推荐指数
1
解决办法
4967
查看次数

使用承诺时,Durandal启动画面

我的基于durandal的SPA在viewmodels的activate函数中进行各种异步ajax调用.我正在使用来自activate函数的Q返回一个promise.

 function activate(){
      return Q.fcall(['getPersons', 'getAgenda']);
 }

 function getPersons(){
      var defer = Q.defer();
      $.ajax({
         //omitting most of the settings
         success: function(data){
              defer.resolve(data);
         },
         error: function(xhr, status){
              defer.reject(status);
         }
      });

     return defer.promise; 
 }
Run Code Online (Sandbox Code Playgroud)

getAgenda函数中也存在类似的代码.所有这一切都很好,我的屏幕转换.麻烦的是,我的getAgenda需要一段时间(2到3秒).没有出现闪屏,屏幕在转换之前保持2或3秒的位置.

我的启动画面很简单,并且确实显示了网站第一次加载.有任何想法吗?

durandal

6
推荐指数
1
解决办法
2462
查看次数

离子框架相当于Knockout?

我喜欢Durandal和KO框架,我发现它们是一个更优雅,更简单的解决方案.

然而,与谷歌背后的Angular享有更好的营销成功,因此更多的自定义选择.

现在在离子的KO端有一些等价的东西吗?或者战争已经赢了,我只需要继续前进.

angularjs knockout.js durandal ionic-framework

6
推荐指数
2
解决办法
1796
查看次数

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
查看次数

如何在停用后丢弃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
查看次数