标签: hottowel

使用AngularJS HotTowel中的vm"ControllerAs"语法时,从单元测试文件访问$ scope

请参见此处:http://www.johnpapa.net/angularjss-controller-as-and-the-vm-variable/

正如标题所示,我正在按照本教程[ http://tech.pro/tutorial/1473/getting-started-with-angularjs-unit-testing]来设置单元测试,除了事实之外一切都很好我似乎无法访问vm变量作为我的$ scope.

dashboard.js

var controllerId = 'dashboard';
angular.module('app')
    .controller(controllerId, ['common', 'datacontext', dashboard]);


function dashboard(common, datacontext) {
    var getLogFn = common.logger.getLogFn;
    var log = getLogFn(controllerId);

    var vm = this;      
    vm.title = 'Dashboard';
Run Code Online (Sandbox Code Playgroud)

dashboard.Spec.js

describe("app module", function() {
    beforeEach(module("app"));

    describe("dashboard", function() {
        var scope,
            controller;

        beforeEach(inject(function($rootScope, $controller) {
            scope = $rootScope.$new();
            controller = $controller;
        }));

        it("should assign Dashboard as title", function() {
            controller("dashboard", {
                $scope: scope
            });
            expect(scope.title).toBe("Dashboard");
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

我试过的:当我在控制器依赖项中直接命名'$ scope'并为其设置"title"属性时,它可以工作(测试通过).但是,我想保持模式不变. …

jasmine angularjs angularjs-scope hottowel karma-runner

32
推荐指数
2
解决办法
1万
查看次数

Durandal和ASP.NET MVC约定

我目前正在评估Durandal在企业ASP.NET MVC应用程序中的使用.

但是,Durandal使用的默认约定似乎与我习以为常的MVC约定相冲突.

John Papa的HotTowel MVC模板非常棒,但是这也似乎通过将内容放在App文件夹中来"消除"MVC惯例而转向Durandals.

我对这些约定的几个问题是:

  • 视图可能分为两个位置(/ App/views和/ Views).
  • 脚本也分为两个位置(/ App/durandal和/ Scripts).
  • 视图不在默认的MVC位置RazorViewEngine.

我宁愿保持每个元素包含在适当的MVC约定中,例如

/Controllers/
---- HomeController
---- AdminController

/Scripts/    
---- durandal/    
---- viewmodels/    
-------- Home
-------- Admin

/Views/    
---- Home    
---- Admin
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 是否可以配置Durandal来实现上述(或类似的)?

  2. 冒险脱离默认的Durandal惯例是否明智?

  3. 这样做有什么潜在的问题?

architecture asp.net-mvc conventions durandal hottowel

15
推荐指数
1
解决办法
2966
查看次数

emberjs开头的"加载屏幕"

我不知道,如果你已经看过这个演示应用程序:http://www.johnpapa.net/hottowel/但是一旦你启动它,你会看到一个非常好的加载屏幕,就像你在任何更大的桌面应用程序/游戏.

所以我自己没有机会正确地完成代码,但最近我开始使用Emberjs,我觉得加载我正在构建的整个SPA的所有js代码都可以在秒区域内.

我现在的问题是,使用emberjs这样的加载屏幕怎么样?或者有更好的方法去做吗?(我不知道怎么认为requirejs不是解决方案,尽管我可能错了)

ember.js single-page-application hottowel

12
推荐指数
4
解决办法
6382
查看次数

为什么HotTowel包含Breeze?

这听起来似乎是表面上的一个愚蠢的问题,但为什么Hot Towel SPA模板包括Breeze

过去几天我一直在学习Hot Towel及其依赖项,据我所知,模板中没有任何内容实际上使用Breeze.也许这会随着未来的发布而改变?

当然,Breeze是一个很好的图书馆.但它必须采用CRUD方法,并要求您以特定方式设计ApiControllers.(元数据,SaveChanges等)请看这里

它还指导您进入实体框架.虽然这更像是一种软依赖,但由于Breeze还展示了没有它的示例,它仍然使用修改后的存储库模式引导您使用类似的实现模式.

如果您使用NoSQL数据存储区或CQRS模式而不是CRUD,那么Breeze将变得非常难以使用.有一些替代的数据访问库可以很好地运用这种风格,例如AmplifyJS.

但热毛巾的其余部分非常棒!我特别喜欢Durandal.所以问题是,如果模板实际上没有进行任何数据访问 - 为什么要包含任何数据访问组件?最好是在没有Breeze的情况下运送它,如果最终用户想要使用Breeze,或者放大,或者其他什么 - 那就这样吧.Hot Towel的其余部分将继续作为一个伟大的SPA实施发光.

breeze hottowel

11
推荐指数
2
解决办法
4263
查看次数

具有SPA架构的ValidateAntiForgeryToken

我正在尝试设置注册和登录Hot Towel SPA应用程序.我已经基于asp.net单页面应用程序模板创建了SimpleMembershipFilters和ValidateHttpAntiForgeryTokenAttribute .

你怎么得到的

 @Html.AntiForgeryToken()
Run Code Online (Sandbox Code Playgroud)

代码以Durandal SPA模式工作.

目前我有一个register.html

<section>
    <h2 data-bind="text: title"></h2>

    <label>Firstname:</label><input data-bind="value: firstName" type="text"  />
    <label>Lastname:</label><input data-bind="value: lastName" type="text"  />
    <label>Email:</label><input data-bind="value: emailAddress" type="text"  />
    <label>Company:</label><input data-bind="value: company" type="text"  />
    <br />
    <label>Password:</label><input data-bind="value: password1" type="password" />
    <label>Re-Enter Password:</label><input data-bind="value: password2" type="password" />
    <input type="button" value="Register" data-bind="click: registerUser" class="btn" />
</section>
Run Code Online (Sandbox Code Playgroud)

register.js:

define(['services/logger'], function (logger) {
    var vm = {
        activate: activate,
        title: 'Register',
        firstName: ko.observable(),
        lastName: ko.observable(),
        emailAddress: ko.observable(),
        company: ko.observable(),
        password1: …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-4 knockout.js single-page-application durandal hottowel

10
推荐指数
1
解决办法
1万
查看次数

Durandal Subrouting(Hottowel)

基本上,我试图在菜单中创建一个菜单.因此,在主菜单路线中,将有一个带有另一组路线的垂直菜单.单击子菜单路径时,只会更新页面的一部分,并且不会重新加载垂直菜单.我猜它会类似于这个KO小提琴http://jsfiddle.net/dPCjM/,但是在主路径视图中需要另一组"ghost"KO指令:

 <!--ko compose: {model: router.activeItem, 
            afterCompose: router.afterCompose, 
            transition: 'entrance'} -->
 <!--/ko-->
Run Code Online (Sandbox Code Playgroud)

和durandal路由器上的一些其他配置......

编辑:并澄清,我不是要尝试在其中一个主菜单项中创建一个下拉列表.我正在尝试在其中一个视图中创建一个菜单.基本上是durandal应用程序内的durandal应用程序:)

IFRAMES?:))))))))))

routing knockout.js durandal hottowel

10
推荐指数
1
解决办法
5018
查看次数

将koGrid与Durandal/HotTowel模板集成

我使用Durandal模板处理asp.net解决方案.

我尝试使用与knockout兼容的koGrid(https://github.com/Knockout-Contrib/KoGrid).在Durandal管理的测试页中插入此网格时,它不起作用:网格似乎在那里但没有正确显示.

我们注意到,如果我们调整窗口大小,则网格会正确调整.

有没有人已经成功将这个koGrid集成到Durandal/HotTowel模板中?

重现问题的步骤:

  • 创建一个新的ASP.NET MVC项目并选择Durandal模板
  • 在项目中添加koGrid(在Nuget中可用)
  • 将此网格放在视图上并添加虚拟数据
  • 运行并显示包含网格的视图

这是一个包含一个ASP.NET MVC项目的zip来重现这个问题:https://www.dropbox.com/s/15rphyhkqp1h8py/KOGrid-HotTowelTemplate.zip

谢谢你的帮助.

knockout.js kogrid durandal hottowel

9
推荐指数
1
解决办法
2830
查看次数

HTTP错误403.14 - 禁止Web服务器配置为不列出此目录的内容

完成了关于Pluralsight的John Papa课程 - 顺便说一句真棒!)

我现在正在创建我的第一个SPA.我来自桌面应用程序开发人员背景,请原谅我,如果这个问题是新手!

当我加载SPA而不是看到启动画面,然后是主屏幕时,我收到此错误消息:

HTTP错误403.14 - 禁止Web服务器配置为不列出此目录的内容.最可能的原因:

未为请求的URL配置默认文档,并且未在服务器上启用目录浏览.

谁能帮忙解决这个问题?

single-page-application durandal hottowel

9
推荐指数
3
解决办法
7万
查看次数

HotTowel(杜兰达真的)和SignalR初始化

所以我正在整合SignalR和HotTowel,虽然我认为这是如何与Durandal本身集成的问题.

问题是我有很多观点.其中一些视图我想响应SignalR消息.考虑到在调用SignalR的集线器启动方法之前必须启动SignalR事件,问题是如何进行此集成.

举个例子,我有view1和view2.我希望每个人在接收到SignalR消息时和在该视图的上下文中做某事(所以让我们说以某种方式更新DOM).这显然是SPA,因此为每个视图调用SignalR启动方法似乎是一个坏主意,因此在启动时启动SignalR听起来像正确的计划,但在那时我的视图可能没有被加载,我仍然如何确保我的活动有适合页面的上下文.

这是基于我的理解,即在调用start之前必须注册SignalR的所有事件.任何想法聪明的StackOverflow人?

编辑以扩展问题

该网站的一部分涉及上传文件以进行解析和处理以导入数据库.我创建了一个视图,其中选择并上传文件(使用FineUploader)到WebApiController.控制器执行检查上载文件的基本步骤,然后启动异步任务以实际执行解析和处理,同时立即返回基本的"Yep that uploaded fine"消息.

这会导致"正在进行"文件列表刷新,并且文件显示为"已上载"状态.在发生异步任务时,将解析文件,然后针对规则系统进行处理,最后将其导入另一个后端数据存储.当每个状态发生变化时,SignalR会向客户端发送消息以通知他们这些更改,从而根据文件名更新状态.为了实现这一点,我必须在SignalR中收到一个函数.甚至需要对我的视图(实际上是viewmodel)进行某种引用,以便它可以更新正确的值.

由于SignalR应该通过调用hub.Start()启动一次,我试图在"启动"阶段执行此操作.但是,当我的SPA启动时,该视图尚未加载,因此也没有该视图模型,因此我负责初始化SignalR的函数无法理解它必须更新的视图/视图模型.

我在使用SignalR时看到的示例显示它在一个视图中使用,但如果您在多个视图中需要它,那确实无法正常工作(您不能只是继续调用hub.start()吗?)

对不起,如果这仍然没有意义,我会发布一些代码或其他东西.

signalr durandal hottowel

8
推荐指数
1
解决办法
1047
查看次数

我的Breeze脚本上已弃用方法的版本问题

当试图在John Papa Pluralsight Video的教程中实现会话部分时.我收到以下错误:

未捕获的TypeError:对象#没有方法'extendQ'

(function () {
    'use strict';

    var app = angular.module('app', [
        // Angular modules 
        'ngAnimate',        // animations
        'ngRoute',          // routing
        'ngSanitize',       // sanitizes html bindings (ex: sidebar.js)

        // Custom modules 
        'common',           // common functions, logger, spinner
        'common.bootstrap', // bootstrap dialog wrapper functions

        // 3rd Party Modules
        'ui.bootstrap',      // ui-bootstrap (ex: carousel, pagination, dialog)
        //'breeze.angular.q'
    ]);

    // Handle routing errors and success events
    app.run(['$route', '$rootScope', '$q', function ($route, $rootScope, $q) {
        // Include $route to kick start …
Run Code Online (Sandbox Code Playgroud)

angularjs breeze q hottowel

8
推荐指数
1
解决办法
2461
查看次数