我有一个Angular指令,它将元素的高度设置为等于浏览器窗口的内部高度(+/-给定的偏移量).该指令响应窗口的"resize"事件并相应地调整其高度.当我的指令范围发出'$ destory'事件时,我删除了对"resize"事件的绑定(我认为保留它会导致一些问题,如果我错了就纠正我).
我不知道如何以"安全"的方式做这个事件分离.如果我在我的应用程序中有多个此指令实例,如果我有其他指令附加到'resize'事件怎么办?
JQuery具有事件命名空间的概念,这似乎是一个很好的解决方案,但Angular的实现(JQLite)不支持这一点.因为我已经在使用Angular,所以我宁愿不使用JQuery,所以我该怎么办?
这是我今天指令的代码
window.angular.module('arcFillClient', [])
.directive('arcFillClientY', ['$window',
function ($window) {
function link($scope, el, attrs) {
var setHeight,
onResize,
cleanUp;
setHeight = function (offSetY) {
var newHeight;
offSetY = offSetY || 0;
newHeight = Math.max($window.innerHeight + parseInt(offSetY, 10)) + 'px';
el.height(newHeight);
};
onResize = function () {
var offset;
offset = attrs.arcFillClientY || 0;
setHeight(offset);
};
attrs.$observe('arcFillClientY', setHeight);
window.angular.element($window).on('resize', onResize);
cleanUp = function () {
window.angular.element($window).off('resize');
};
$scope.$on('$destroy', cleanUp);
}
return {
link: link
};
Run Code Online (Sandbox Code Playgroud)
更新看起来像RTFM的情况,但万一其他人徘徊在这里,这里有一些更多的信息.将原始函数(在我的情况下 …
考虑以下"即发即弃"用例:
调用者从我的方法请求一些数据.我的方法检查缓存以查看数据是否已存在.如果不是,则从源获取并缓存它.在获得结果之前,调用者不需要等待缓存发生,并且如果缓存失败,该方法不应该阻止调用者获得结果.我今天拥有的,看起来像这样:
public Foo GetFoo(string fooKey)
{
// look for Foo with fooKey in cache
// if Foo is not found, get Foo with fooKey from source
// and assign it to local variable myFoo
Task cacheTask
= Task.Run
(
() => CacheFoo(myFoo)// fire-and-forget the caching of myFoo
);
return myFoo;
}
Run Code Online (Sandbox Code Playgroud)
如果CacheFoo抛出异常,它就会被观察到,最终(在.Net 4.5中)它被框架吞没了.我宁愿自己最后一次清理异常,但我不想阻止当前的线程.最好的方法是什么?
这是我尝试过的
try
{
...
cacheTask.ContinueWith
(
(e) => {
if (cacheTask.IsFaulted)
{
/* log cacheTask.Exception */;
}
}
, TaskContinuationOptions.OnlyOnFaulted
);
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?我是否需要IsFaulted上的"if"语句或者这是多余的,因为我已经指定了"OnlyOnFaulted"?
任何意见/建议将不胜感激.
c# error-handling asynchronous task-parallel-library .net-4.5
------------ Josn schema -----------
{
"type": "object",
"properties": {
"street_address": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
}
},
"required": [
"street_address"
],
"additionalProperties": false
}
Run Code Online (Sandbox Code Playgroud)
在上面的模式中,我想在城市和州之间创建一个选择.无论是城市还是州都可以来json.所以json下面会无效
{
"street_address": "abc",
"city": "anv",
"state": "opi"
}
Run Code Online (Sandbox Code Playgroud)
以下一个应该是有效的
{
"street_address": "abc"
}
Run Code Online (Sandbox Code Playgroud)
要么
{
"street_address": "abc",
"city": "anv"
}
Run Code Online (Sandbox Code Playgroud)
要么
{
"street_address": "abc",
"state": "opi"
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我修改上面的架构来完成目标.
我有一个自定义的Angular JS指令,其模板包含一个包含一些引用范围变量的表达式的图像.就像是:
scope:{s:'@'},
template: '<img src="{{s}}" width="200">'
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是当我将我的指令放在转发器中时,我在控制台中得到一个404,看起来像:
GET http://run.jsbin.io/%7B%7Bs%7D%7D 404 (Not Found)
这是一个jsbin,我在一个简单的(尽管做作的)例子中复制了这个行为:http://jsbin.com/lavozequ/4/edit?html,js,output
如果您查看JavaScript控制台(不是来自浏览器的JSBin中的那个),您只能看到问题.
我相信这是设计的.我认为转发器在数据绑定之前构建DOM树以提高性能.因此,第一次通过浏览器尝试获取未绑定的元素,该元素是指向不存在的图像的字符串.
我的问题是,我可以创建一个避免这个404的类似指令吗?