从Angular 1.1.4开始,您可以拥有一个动态模板URL.从这里开始,
templateUrl - 与模板相同,但模板是从指定的URL加载的.由于模板加载是异步的,因此编译/链接将暂停,直到加载模板为止.
您可以将templateUrl指定为表示URL的字符串,或者指定为带有两个参数tElement和tAttrs的函数(在下面的编译函数api中描述)并返回表示url的字符串值.
如何利用它来生成基于我的指令属性的动态模板?显然这不起作用,因为tAttrs.templateType只是字符串"templateType"
templateUrl: function (tElement, tAttrs) {
if (tAttrs.templateType == 'search') {
return '/b/js/vendor/angular-ui/template/typeahead/typeahead.html'
} else {
return '/b/js/vendor/angular-ui/template/typeahead/typeahead2.html'
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于我无法访问范围,我该如何管理?
努力在Jasmine/Karma中设置单元测试.我有一个服务依赖的控制器,该服务有另一个服务依赖.我不按类型(指令,服务等)组织我的模块,而是按功能(布局,摘要视图等)组织模块.
这是架构:
angular.module('myApp', ['ngResource', 'myApp.base', 'myApp.layout','myApp.common']);
angular.module('myApp.base', ['myApp.common']);
angular.module('myApp.common',[]);
angular.module('myApp.layout',['myApp.common']);
Run Code Online (Sandbox Code Playgroud)
控制器:
angular.module('myApp.layout')
.controller('LayoutCtrl', ['$scope', '$rootScope', '$timeout', 'layoutService', 'urlService', 'BaseService',
function ($scope, $rootScope, $timeout, layoutService, urlService, BaseService) {
//controller code here
});
Run Code Online (Sandbox Code Playgroud)
布局服务:
angular.module('myApp.layout')
.service('layoutService', ['$http', '$resource', '$rootScope', '$location', '$route', 'errorHandlingService', 'utilService',
function ($http, $resource, $rootScope, $location, $route, errorHandlingService, utilService) {
//service code here
});
Run Code Online (Sandbox Code Playgroud)
根据我的理解,如果我只是包含beforeEach(module('myApp.layout'));
,我应该可以访问我的布局模块中的控制器,服务,过滤器和指令.
相反,以下代码失败:
describe('Layout Controller', function() {
var ctrl, scope, service;
beforeEach(module('myApp'));
beforeEach(module('myApp.layout'));
beforeEach(inject(function($controller, $rootScope, layoutService) {
scope = $rootScope.$new();
service = layoutService;
//Create the …
Run Code Online (Sandbox Code Playgroud) 我正在将开发团队从Chirpy转移到视觉工作室的附加组件,用于组合和缩小CSS/JS文件,作为工作流程自动化过程的一部分.
在chirpy中,配置看起来像这样(为简洁而截断):
<FileGroup Name="scripts.combined.js" Minify="both">
<File Path="forms.js" Minify="false" />
<File Path="cookie_monster.js" Minify="true" />
...
</FileGroup>
Run Code Online (Sandbox Code Playgroud)
所以在这个删节的情况下,我有2个文件.一个需要缩小,另一个不需要.(根据这里的人,缩小forms.js打破功能,我还没有分配时间来修复它).
在grunt
,我需要对此列表中的某些文件运行缩小任务,但不在其他文件上运行.然后我需要concat
对所有文件(缩小或其他)运行任务.
鉴于uglifyJS需要一个dest
集合来输出缩小的文件,我只需将其设置为类似的东西temp.min.js
,在我的concat任务中,使用此文件来构建我的scripts.combined.js
文件[由缩小和未缩小的文件组成],并使用grunt clean来删除该temp.min.js
文件?
有一个更好的方法吗?
[编辑补充]我也担心潜在的加载顺序冲突.当前工具配置为"组合所有这些文件",每个文件上都有一个标志,指示是否应缩小它.我不确定如何使用grunt复制此工作流程
我有一个对象数组,其中每个对象都有一个"children"属性(下面的示例数据).我想把父母/孩子压成一个单独的阵列,每个父母都紧跟着它的孩子.
我使用lo-dash/underscore编写了以下内容,当我为每个父项设置一个且只有一个子项时,它可以工作:
_.flatten(_.zip(myArr, _.flatten(myArr, "children")))
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用类似_.each的东西并构建一个对象,只是想知道是否有一个时髦的方法来使用_来做到这一点.
示例数据:
[{
name: "Some Name",
value: 1234,
children: [{
name: "Another name",
value: 3456
}, {
name: "A third name",
value: 9876
}]
}, {
name: "Omg Lazer Guns",
value: 3333,
children: [{
name: "PewPewPew",
value: 4444
}]
}];
Run Code Online (Sandbox Code Playgroud) 在部署我的MVC应用程序时,.NET 4.5框架正在捆绑和缩小我的CSS.但是,结果文件为空,因此不应用CSS规则.在Chrome中,我收到了Resource interpreted as Stylesheet but transferred with MIME type text/plain
警告.在IE9中,我收到CSS was ignored due to mime type mismatch
警告.
这就是我的BundleConfig中的内容
bundles.Add(
new StyleBundle("~/Content/bootstrap").Include(
"~/Content/bootstrap/bootstrap-responsive.css",
"~/Content/bootstrap/bootstrap-editable.css",
"~/Content/bootstrap/FileUpload.css"));
Run Code Online (Sandbox Code Playgroud)
这是我的布局头:
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<title>@ViewBag.Title</title>
<link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<meta name="viewport" content="width=device-width" />
<link href="@ViewBag.StyleUrl" rel="stylesheet" type="text/css" />
@Styles.Render("~/Content/bootstrap")
<script src="~/scripts/libs/modernizr/modernizr-2.5.3.js" type="text/javascript"></script>
</head>
Run Code Online (Sandbox Code Playgroud)
额外的样式表用于基于管理工具中的配置的动态加载样式表.
当我在本地运行,或者如果我设置debug ="true",那么我得到我的个人文件和一切看起来应该.如果我将这些硬编码到我的布局页面,它们显示正常.我已经检查过IIS并查看了CSS的正确MIME类型(考虑到硬编码值的工作原理,这是有意义的).我还检查了以确保安装了"静态内容"角色服务,因为我在Google搜索中也遇到过这种情况.
有什么想法吗?
所以我在MVVM应用程序中工作,我开始对功能进行一些亮点和润色.
在我的页面左侧,我显示这些值:
DateActivated
DateCompleted
DateTrialClosed
DateAccountingClosed
Run Code Online (Sandbox Code Playgroud)
如果DB中有日期,我会在文本块中显示它.如果没有,我正在向用户显示一个按钮,说"激活工单","完成工单"等...
我将这8个(4个文本块,4个按钮)控件中的每一个的可见性绑定到我ViewModel
的类型中的唯一属性Windows.Visibility
.在我的setter中SelectedWorkOrder
,我评估SelectedWorkOrder.DateActivated
属性的当前值(例如)并相应地设置可见性属性.这对我来说有点冗长,但它按预期工作.
我的下一步是在第一步之后禁用任何可见按钮(逻辑很简单......在单击按钮1之前无法单击按钮2.在单击1和2之前无法单击按钮3).我不确定实现这个的最佳方法是什么.作为一个FYI,我在我的项目中已经有一个boolToVisibility值转换器......我只是不确定实现它与我现在做的有什么不同(参见下面的VM代码).
目前我的XAML有这个:
<TextBlock Text="Proposed:" />
<TextBlock Text="Activated:" />
<TextBlock Text="Eng Completed:" />
<TextBlock Text="Trial Close:" />
<TextBlock Text="Accounting Close:" />
<TextBlock Text="{Binding SelectedWorkOrder.EstimatedStartDate}" Visibility="{Binding ProposedVisibility}" />
<TextBlock Text="{Binding SelectedWorkOrder.DateActivated}" Visibility="{Binding ActivatedTextBlockVisibility}" />
<Button Content="Activate Work Order" Visibility="{Binding ActivatedButtonVisibility}" />
<TextBlock Text="{Binding SelectedWorkOrder.DateCompleted}" Visibility="{Binding EngineeringCompletedTextBlockVisibility}" />
<Button Content="Work Order Eng Complete" Visibility="{Binding EngineeringCompletedButtonVisibility}" />
<TextBlock Text="{Binding SelectedWorkOrder.DateClosed}" Visibility="{Binding TrialCloseTextBlockVisibility}" />
<Button Content="Close Work Order (Trial)" …
Run Code Online (Sandbox Code Playgroud) 我正在开发我的第一个大型Backbone/RequireJS应用程序,我有一个简单的问题.
当我在页面上打开一个视图,并且我在控制台中时,如何访问我的Backbone对象的属性(模型,视图等).
传统上在Backbone中,我这样做:
var myApp : {
models: {},
views: {},
etc...
}
Run Code Online (Sandbox Code Playgroud)
使用require,我没有这样的全局对象了.我为调试做的只是在窗口上创建一个新对象,然后我可以从控制台访问.有没有办法在不必在窗口上创建新变量的情况下深入研究这个问题?(我显然会在制作之前删除这个全局obj,只是希望保存步骤并直接进入控制台).
干杯.
我在批处理文件中有以下命令:
"C:\MI2\Stream\bin\Debug\Stream.exe" 19
"C:\MI2\Stream\bin\Debug\Stream.exe" 20
"C:\MI2\Stream\bin\Debug\Stream.exe" 21
"C:\MI2\Stream\bin\Debug\Stream.exe" 23
"C:\MI2\Stream\bin\Debug\Stream.exe" 25
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行我创建的应用程序的5个实例,并为每个实例传递一个不同的参数.我的目标是当我运行这个批处理文件时,它会启动这个应用程序的5个实例,为每个实例加载一个UI组件.最终我会使这个更优雅,并在这周围放一个包装应用程序,但是现在我只想让它们同时运行.
问题是,当我启动这个批处理文件时,它执行第一行,加载UI.而已.它不会移动到第二行.思考?
编辑添加 - 我当然可以从单独的批处理文件中执行此操作,但我希望一键启动.斯科特
我正在创建一个帮助器,输出7或8行HTML来清理我的模板(并遵守DRY - 嘿,押韵 - wikka wikka).
这是调用addOn帮助程序的示例
{{#each promotion.CampaignColors}}
{{{addOn . CampaignColorType.Code CampaignColorType.Name HexColor "some content" "a title"}}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)
现在,根据我的理解,上下文之后的所有内容都应该是一个名为options的哈希.这是我的addOn.js的存根
define([
'handlebars',
'hbs!templates/addOn',
], function (Handlebars, AddOnTemplate) {
function addOn(context, options) {
var data = {};
var compiledTemplate = AddOnTemplate(data);
console.log(compiledTemplate);
return compiledTemplate;
}
Handlebars.registerHelper('addOn', addOn);
return new Handlebars.SafeString(addOn);
});
Run Code Online (Sandbox Code Playgroud)
但是,选项仅设置为我传递的第一个参数.如果我将方法签名更改为:
function addOn(context, key, displayName, value, content, title, test, options) {
...
}
Run Code Online (Sandbox Code Playgroud)
..我的每个值都被设置,并且选项NOW成为具有空哈希的对象.
声明params明确有效,但我更喜欢使用hash.有关如何做到这一点的任何想法?
我有一个sql server 2k8数据库,每天填充数十万条记录.
我正在编写一些代码,它们将调用db,检索n条记录,处理它们,并将一些数据写回db.
我有两种方法可以做到这一点(伪代码):
function xyz() {
conn = conn creation code
conn.open();
while(not last record) {
select next 1000 records
process each record
last record = true
}
conn.close();
xyz();
}
Run Code Online (Sandbox Code Playgroud)
基本上每批创建一个连接.第二种方法:
function xyz() {
conn = connection creation code
while(conn.open();) {
select next 1000 records
process each record
last record = true
}
conn.close();
xyz();
}
Run Code Online (Sandbox Code Playgroud)
我很好奇什么是更好的做法.我觉得它是后者,但它也会与我的数据库建立一个或多或少的永久/持久连接.我担心可能的内存超支或其他一些问题.
思考?
斯科特
第一个MVC项目,只是好奇最好的方法是管理它.
我正在创建的所有观点都包含以下内容
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
我更愿意在关闭身体标签之前保留我的js.我知道我显然可以将它移到我的layout.cshtml文件中,但我想有一种更优雅的MVC/Razor方法(特别是如果我有特定于视图的文件,我不想全局加载).
我怎么能做到这一点?
我应该如何处理BackboneJS中的路由?路由时,在新视图之后,我应该触发事件还是直接渲染视图?
以下是两种情况:
触发事件:
routes: {
'orders/view/:orderId' : 'viewOrder'
},
viewOrder: function (orderId) {
var viewOrderView = new ViewOrderView();
vent.trigger('order:show', orderId);
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我有:
var ViewOrderView = Backbone.View.extend({
el: "#page",
initialize: function () {
vent.on('order:show', this.show, this);
},
show: function (id) {
this.id = id;
this.render();
},
render: function () {
var template = viewOrderTemplate({ id: this.id });
this.$el.html(template);
return this;
}
});
Run Code Online (Sandbox Code Playgroud)
或者,我应该走这条路:
routes: {
'orders/view/:orderId' : 'viewOrder'
},
viewOrder: function (orderId) {
var viewOrderView = new ViewOrderView({id : orderId }); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的标记缓存到$ .template中.在其中,我想添加一个条件,其中,如果变量为空,则输出会反映出来.
这是我尝试的片段.当我运行它时,事件类型是正确的或空白."(没有版主列出)"永远不会出现.
我究竟做错了什么?
var markup = '<div class="new_line general_heading">' +
'{{if EventType != ""}}' +
'${$EventType}' +
'{{else}}' +
'(No Moderators Listed)' +
'{{/if}}' +
'</div>' +
'<div class="gray_rule allclear"></div>';
Run Code Online (Sandbox Code Playgroud) angularjs ×2
backbone.js ×2
c# ×2
requirejs ×2
angular-ui ×1
asp.net-mvc ×1
batch-file ×1
gruntjs ×1
jasmine ×1
jquery ×1
karma-runner ×1
mvvm ×1
razor ×1
silverlight ×1
sql ×1
sql-server ×1
uglifyjs ×1
unit-testing ×1