我试图理解RequireJS以及如何使用它来加载在我尝试在模块中使用它们时不会显示为Undefined的依赖项.
我开始使用John Papa的Pluralsight"SPA with HTML5"课程.我从未理解为什么需要在脚本标记中指定每个库,当我认为在requireJS中AMD的全部要点是你将责任交给它并且它的data-main属性异步加载时需要什么.对于该课程中提出的解决方案而言,双重困惑的是它没有遵循RequireJS文档中记录的整个数据主要设置.
移动几个月,我们现在拥有带有Durandal的"Hot Towel"模板,一个示例"服务"模块,一个遵循RequireJS文档的设置和一个相当容易理解的入门应用程序.唯一能听起来警钟的是大多数库都在通常的"脚本"文件夹中,而Durandal与应用程序逻辑一起位于一个完全独立的"app"文件夹中.如果我从pluralsight SPA课程中学到了一件事并且使用requireJS,那就是从一个文件夹中移动东西会很快变得非常混乱.
无论如何,新模板工作正常.模块依赖性工作得很好,Views和ViewModel是绑定的,并且有一个示例记录器模块,它具有模块依赖于Durandal模块(即在app文件夹中),效果很好.根据Hot Towel模板中的代码添加另一个使用jQuery和mockJson的简单模块应该很简单,对吧?呃,不,不是真的.
这是一个非常简单的声明,用于在'app/services'文件夹中启动我的模块'dataservice.js'
define(['jquery'],
function ($) {
var init - function....
Run Code Online (Sandbox Code Playgroud)
当我尝试在我的代码块中访问它时,我当然得到'undefined'.因此,在阅读了太多令人困惑的文献之后(其中大部分结果都是评论说'这在jquery xxxx中发生了变化因此不再相关')我有以下问题:
当我监视网络流量时,我可以看到jQuery库正在被正确下载,如果我将它添加到BundleConfig.cs中定义的'vendor'包中,那就是mockJSON所以jQuery就在那里等着我的浏览器,即使我没有我自己给它一个模块定义.要摆脱我的模块文档中的'undefined'引用似乎意味着我需要添加如下内容:
require.config({
paths: {
'text': 'durandal/amd/text',
jquery: '../Scripts/jquery-1.9.1'
}
});
Run Code Online (Sandbox Code Playgroud)
('text'声明已经存在.我只是添加了jquery别名)这导致我的模块有一个函数而不是'undefined'解决了部分问题,除了它导致脚本的第二个副本我已经看到由于Hot Towell模板'供应商'捆绑而下载.我不想出于明显的原因下载两个jQuery副本,所以我该如何解决这个问题呢?
我已将mockJSON库添加到我的'vendor'包中,这通常是使用$ .mockJSON引用的.我无法做任何事情来使其有效.即使我使用与jquery相同的进程来修改对脚本的引用,其中包含'require.config({paths:'声明我未定义,更不用说'库已下载两次'问题已经提到过了.如何定义库依赖项,以便在模块中使用该库?
我猜这种痛苦与requireJS是关于下载异步模块但jQuery和mockjson是同步的事实有关,所以我必须通过其他方式下载它们(捆绑硬编码参考),但这仍然意味着我的requireJS模块需要一种方式来表明它们是依赖关系,而我尝试过的任何工作都没有.我对这是一个syncrhonoys /异步问题的假设是正确的吗?我本来希望在Durandal中找到至少一个使用jQuery并且理想情况下是jquery插件的示例应用程序但我能看到的只是使用Durandal模块的模块代码而不是其他任何东西.所有这些库都在requireJS的主根之外的事实可能会加剧这个问题,因为我不得不求助于带有'../'字符串的路径来获取引用.有没有人知道为什么除了Durandal之外的所有图书馆的结构都在一个文件夹中,但Durandal是完全独立的?存在?
我理解requireJS在define命令中使用'convention over configuration',这样如果我错过了一个模块id,那么它会假设一个基于模块源文件名的id和来自使用data-main指定的已定义根文件夹的路径.然而,杜兰达尔在其代码中引用了一个名为"入口"的模块.这个模块不在根文件夹中,而是在一个名为'Durandal/transitions/entrance.js'的文件夹中,所以我很困惑为什么对它的引用是'入口'而不是'Durandal/transitions/entrance'.哪里有别名?
最后(hoorah)我没有把握依赖关系作为第一个参数(一个字符串数组)指定为一个定义语句与省略这些依赖关系然后在模块工厂中成为第一个指定类似var系统的参数之间的差异的微妙之处= require('../ system') - 为什么我会使用一种形式而不是另一种形式.我看到两个类型在示例应用程序中混合使用并且不明白原因.
PS:当我编辑这个条目时,我看到五个问题编号为1到5.当我查看它时,我看到它被渲染为1然后是1到4.一些奇怪的HTML编辑器与渲染错误无论我尝试什么格式我都没有'能够修复,所以请发表任何评论,好像有五个问题编号为1到5而不是2编号1和3编号2到4!)
我可能是MVC中最缺乏经验的人,更不用说Hot Towel SPA了,但是我希望能够生产出基于这些技术的系统.
我已经阅读了Breeze网站和John Papa的所有文档,但我根本不知道如何创建与数据库的交互并检索数据和显示数据,添加或编辑数据,包括删除数据.
我必须在屏幕上构建一个大约5个网格的仪表板,显示实时数据,因为它会进行一些时间计算.
到目前为止我所有的2天都修改了热毛巾模板以显示我的项目名称,我已经更改了热毛巾图标.我无法绕过这些东西......两年来,我一直是一个三层架构的ASP.NET网站开发人员.
有人可以给我指导如何通过这个模板传递数据吗?
这来自第三方库在Script中的想法,以阻止开发人员自定义它们.它会鼓励他们编写扩展,以便更容易地接受任一库的新版本.
我用Durandal和Breeze开发了一个ASP.NET MVC解决方案.我需要将前端翻译成法语和荷兰语.如何进行Durandal /淘汰赛?
在经典的ASP.NET MVC解决方案中,我们有机会将视图呈现在服务器端(感谢razor).
谢谢你的帮助.
我可以启动一个标准的asp.net mvc 4内部网项目,并使用以下内容来装饰控制器或方法:
[System.Web.Mvc.Authorize(Roles = "MyApp Users")]
Run Code Online (Sandbox Code Playgroud)
我已经对它进行了测试,它将完美运行(因为我的域帐户是Active Directory中"MyApp用户"的成员)
但是,我的问题/问题是如何为"热毛巾"应用程序获得相同类型的行为?我尝试装饰我的微风控制器,HotTowel控制器或具有相同属性的任何方法,我永远无法验证......是什么给出的?
非常感谢您的帮助.
我正在使用Hot Towel SPA项目,我试图在激活视图时调用简单的js函数.我所看到的是,当调用activate函数时,似乎没有加载该项.
我也尝试将代码放在由其他SO帖子建议的activate调用的初始化函数中.这似乎没有帮助.
那么在Durandal/HotTowel中调用视图加载函数的推荐方法是什么?
home.js(查看型号)
define(['services/logger'], function (logger) {
var vm = {
activate: activate,
title: 'Home'
};
return vm;
function activate() {
logger.log('Home View Activated', null, 'home', true);
return init();
}
function init() {
$("#backBtn").hide();
console.log($("#myBtn").html()); // returns undefined
}
});
Run Code Online (Sandbox Code Playgroud)
home.html(查看)
<section>
<div id="myBtn">test</div>
</section>
Run Code Online (Sandbox Code Playgroud) 我正在使用以下步骤创建网站.
Install-Package HotTowel
使用NeGet 运行并更新所有代码.当我运行代码.
HotTowel\index.cshtml
而不是具有登录代码的Home\Index.cshtml页面.HotTowel\index.cshtml
包含在生成的html代码中Shared\_Layout.cshtml
.我想要的是
该站点首先显示登录页面,并在登录后重定向到HotTowel主页.
我尝试在预先创建的内置SPA项目上安装HotTowel,并遇到了类似的问题.
我发现注释掉文件中的以下HotTowelRouteConfig.cs
行将确保开始页面转到Home\Index.cshtml
.
[assembly: WebActivator.PreApplicationStartMethod(
typeof(test4.App_Start.HotTowelRouteConfig), "RegisterHotTowelPreStart", Order = 2)]
Run Code Online (Sandbox Code Playgroud) 我在javascript测试世界中很新,我在我的hottowel应用程序中实现一些问题.我在网上找到的大多数例子都没有测试amd/require,而关于amd/require的例子没有显示其他一些东西.
我试图通过传递模拟服务来测试我的虚拟现实,让我们说...
视图模型:
define(['services/dataService'], function (dataService) { function activate() { dataService.returnSomething(); } });
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向(理想情况下是一个具体的例子)如何实现这一目标?任何测试框架和模拟库都可以.
谢谢
我目前正在尝试将Azure目录身份验证库(ADAL.JS)挂钩到UI-Router中.我已经连线,并且它重定向正确,但它总是在重定向之前丢掉404.重定向工作,然后被发送回我的应用程序,显示404.
我像这样修改了状态:
{
state: 'admin',
config: {
url: '/admin',
templateUrl: 'app/admin/admin.html',
controller: 'AdminController',
controllerAs: 'vm',
title: 'Admin',
settings: {
nav: 2,
content: '<i class="fa fa-lock"></i> Admin'
},
requireADLogin: true
}
Run Code Online (Sandbox Code Playgroud)
我已经使用了正常的Angular RouteProvider,并且没有抛出404.
我正在试图将其引入的应用程序由John Papas Yo Hot Towel发电机生成.
Durandal:如果可能的话,在Viewmodels之间传递数据(参数)的正确方法是什么(不处理后端).
假设我有2个视图概述和详细信息我希望用户点击列表元素从概述中 获取该元素的ID并将其传递给详细信息 Viewmodel以便我可以开始使用该ID.
感谢您的帮助
hottowel ×10
durandal ×6
breeze ×3
asp.net ×2
asp.net-mvc ×2
javascript ×2
requirejs ×2
adal ×1
ajax ×1
angularjs ×1
html5 ×1
jquery ×1
knockout.js ×1