请参见此处: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"属性时,它可以工作(测试通过).但是,我想保持模式不变. …
我目前正在评估Durandal在企业ASP.NET MVC应用程序中的使用.
但是,Durandal使用的默认约定似乎与我习以为常的MVC约定相冲突.
John Papa的HotTowel MVC模板非常棒,但是这也似乎通过将内容放在App文件夹中来"消除"MVC惯例而转向Durandals.
我对这些约定的几个问题是:
RazorViewEngine
.我宁愿保持每个元素包含在适当的MVC约定中,例如
/Controllers/
---- HomeController
---- AdminController
/Scripts/
---- durandal/
---- viewmodels/
-------- Home
-------- Admin
/Views/
---- Home
---- Admin
Run Code Online (Sandbox Code Playgroud)
我的问题是:
是否可以配置Durandal来实现上述(或类似的)?
冒险脱离默认的Durandal惯例是否明智?
这样做有什么潜在的问题?
我不知道,如果你已经看过这个演示应用程序:http://www.johnpapa.net/hottowel/但是一旦你启动它,你会看到一个非常好的加载屏幕,就像你在任何更大的桌面应用程序/游戏.
所以我自己没有机会正确地完成代码,但最近我开始使用Emberjs,我觉得加载我正在构建的整个SPA的所有js代码都可以在秒区域内.
我现在的问题是,使用emberjs这样的加载屏幕怎么样?或者有更好的方法去做吗?(我不知道怎么认为requirejs不是解决方案,尽管我可能错了)
这听起来似乎是表面上的一个愚蠢的问题,但为什么Hot Towel SPA模板包括Breeze?
过去几天我一直在学习Hot Towel及其依赖项,据我所知,模板中没有任何内容实际上使用Breeze.也许这会随着未来的发布而改变?
当然,Breeze是一个很好的图书馆.但它必须采用CRUD方法,并要求您以特定方式设计ApiControllers.(元数据,SaveChanges等)请看这里
它还指导您进入实体框架.虽然这更像是一种软依赖,但由于Breeze还展示了没有它的示例,它仍然使用修改后的存储库模式引导您使用类似的实现模式.
如果您使用NoSQL数据存储区或CQRS模式而不是CRUD,那么Breeze将变得非常难以使用.有一些替代的数据访问库可以很好地运用这种风格,例如AmplifyJS.
但热毛巾的其余部分非常棒!我特别喜欢Durandal.所以问题是,如果模板实际上没有进行任何数据访问 - 为什么要包含任何数据访问组件?最好是在没有Breeze的情况下运送它,如果最终用户想要使用Breeze,或者放大,或者其他什么 - 那就这样吧.Hot Towel的其余部分将继续作为一个伟大的SPA实施发光.
我正在尝试设置注册和登录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
基本上,我试图在菜单中创建一个菜单.因此,在主菜单路线中,将有一个带有另一组路线的垂直菜单.单击子菜单路径时,只会更新页面的一部分,并且不会重新加载垂直菜单.我猜它会类似于这个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?:))))))))))
我使用Durandal模板处理asp.net解决方案.
我尝试使用与knockout兼容的koGrid(https://github.com/Knockout-Contrib/KoGrid).在Durandal管理的测试页中插入此网格时,它不起作用:网格似乎在那里但没有正确显示.
我们注意到,如果我们调整窗口大小,则网格会正确调整.
有没有人已经成功将这个koGrid集成到Durandal/HotTowel模板中?
重现问题的步骤:
这是一个包含一个ASP.NET MVC项目的zip来重现这个问题:https://www.dropbox.com/s/15rphyhkqp1h8py/KOGrid-HotTowelTemplate.zip
谢谢你的帮助.
完成了关于Pluralsight的John Papa课程 - 顺便说一句真棒!)
我现在正在创建我的第一个SPA.我来自桌面应用程序开发人员背景,请原谅我,如果这个问题是新手!
当我加载SPA而不是看到启动画面,然后是主屏幕时,我收到此错误消息:
HTTP错误403.14 - 禁止Web服务器配置为不列出此目录的内容.最可能的原因:
未为请求的URL配置默认文档,并且未在服务器上启用目录浏览.
谁能帮忙解决这个问题?
所以我正在整合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()吗?)
对不起,如果这仍然没有意义,我会发布一些代码或其他东西.
当试图在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) hottowel ×10
durandal ×6
knockout.js ×3
angularjs ×2
breeze ×2
architecture ×1
asp.net-mvc ×1
conventions ×1
ember.js ×1
jasmine ×1
karma-runner ×1
kogrid ×1
q ×1
routing ×1
signalr ×1