小编Bil*_*our的帖子

如何在指令中安全地清理AngularJS事件绑定

我有一个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的情况,但万一其他人徘徊在这里,这里有一些更多的信息.将原始函数(在我的情况下 …

javascript angularjs

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

火灾中的异常处理和忘记C#5(在.net 4.5中)

考虑以下"即发即弃"用例:

调用者从我的方法请求一些数据.我的方法检查缓存以查看数据是否已存在.如果不是,则从源获取并缓存它.在获得结果之前,调用者不需要等待缓存发生,并且如果缓存失败,该方法不应该阻止调用者获得结果.我今天拥有的,看起来像这样:

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

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

当元素是可选的时,如何在json模式中定义choice元素?

------------ 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)

有人可以帮我修改上面的架构来完成目标.

json jsonschema

8
推荐指数
2
解决办法
9137
查看次数

中继器中的自定义角度图像指令导致404

我有一个自定义的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的类似指令吗?

javascript angularjs

3
推荐指数
1
解决办法
493
查看次数