我知道我可以使用外部变量来识别外部函数需要处理的某些状态.但请考虑一下:如果内部函数是异步的?外部函数不会等待内部函数的变量会改变,那么我现在如何返回外部函数呢?
function outer() {
var flag = true;
// For example, a jquery-like ajax call
$.ajax({
// Some settings
error: function(jqXHR, textStatus, errorThrown) {
// Here I want to return outer()
flag = false;
}
});
return flag;
}
Run Code Online (Sandbox Code Playgroud)
所以你可以看到,如果我flag用作返回值,outer()很可能会返回true,因为ajax调用可能需要很长时间.出于同样的原因,我不想设置,async: false因为这将停止页面反应.
我有一个自定义事件core-transitionend(实际上由Polymer解雇),我可以使用设置事件处理程序document.addEventListener().但是在AngularJS中最好的做法是什么?
或者,我可以在DOM中明确设置处理程序,即<paper-ripple on-core-transitionend="enter()"></paper-ripple>如何在AngularJS中定义此函数?
我完全糊涂了.当ajax调用改变其值时,为什么我的ng-repeat不刷新?我在这里看过很多问答,但他们都没有谈到ajax电话.
HTML:
<div class="row" ng-controller="EntryCtrl">
<div id="treeview" class="col-xs-4 col-sm-4 col-md-4 col-lg-4">
<ul>
<li ng-repeat="root in rootEntry">{{root.Name}}</li>
</ul>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
JS:
function EntryCtrl ($scope, $http) {
$scope.rootEntry = [];
$http.get('read/root').success(function(root) {
$scope.rootEntry = root;
console.log($scope.rootEntry);
});
}
Run Code Online (Sandbox Code Playgroud)
控制台确实记录了服务器返回的数组.但是html中的列表从未更新过.如果我使用$scope.$apply,$digest会发生错误.
控制台输出
[Object]
0: Object
Attributes: null
Id: "534580464aac494e24000001"
Name: "Registry"
Path: ""
__proto__: Object
length: 1
__proto__: Array[0]
Run Code Online (Sandbox Code Playgroud)
所以这是root服务器返回的结构.这是数据类型的问题吗?因为它Object不是Array.我使用Golang作为服务器并用于json.Marshal()从MongoDB打包数据.
更新
function EntryCtrl ($scope, $http) {
$scope.rootEntry = [];
$http.get('read/root').success(function(root) {
$scope.rootEntry …Run Code Online (Sandbox Code Playgroud) javascript ajax angularjs angularjs-scope angularjs-ng-repeat
现在我有一些文件,其中的每一个都有一个键path像和值\A\,\B\,\A\C\,\A\C\D\,\A\E\,\A\E\F\.
我想找到只有1段的那些.这意味着结果应该是\A\和\B\.我使用正则表达式/^\\[^\\]*\\$/,它在MongoDB终端中工作正常.但是,当我尝试将它应用于Go程序时,它不起作用.
转码:
var nodeList []NodeEntry // NodeEntry would match every field of one document
err = c.Find(bson.M{"path": bson.M{"$regex": bson.RegEx{"^\\[^\\]*\\$", ""}}}).All(&nodeList)
fmt.Println(nodeList)
Run Code Online (Sandbox Code Playgroud)
输出:
[]
Run Code Online (Sandbox Code Playgroud)
这很奇怪,然后我发现任何正则表达式\\都会产生空结果.
这是一个mgo的错误吗?
(我不知道这是不合适的,但我也在mgo.users邮件列表上发布了这个问题.)
假设我有这样的字典:
docDict = {"alpha": ["a", "b", "c", "a", "b"], "bravo": ["b", "c", "d", "c", "d"]}
Run Code Online (Sandbox Code Playgroud)
而我想要做的就像计算"文档频率":假设每个字典项都是一个文档,我有一个特定的单词,那么有多少文档包含该单词?
我看过很多帖子告诉我如何计算频率,但是如果"a"在文档中出现两次"alpha",我只需要计数为1.所以"频率" "a"应该是1,"c"应该是2.
我知道我可以迭代整个文档字典,并在文档中找到单词时添加计数器.或者我可以首先使每个文档中的单词都是唯一的,然后组合所有文档并计算单词.
但我认为有更好的方法,更有效的方式.有任何想法吗?
顺便说一下,有什么方法可以保持字典的结构吗?在这个例子中,我想得到一个结果{"alpha": {'c': 2, 'b': 2, 'a': 1}, "bravo": {'c': 2, 'b': 2, 'd': 1}
更新
如果在这里我只有一个列表(类似的东西[["a", "b", "c", "a", "b"], ["b", "c", "d", "c", "d"]]),我怎么能得到像这样的结果列表[[1, 2, 2, 0], [0, 2, 2, 1]].
我不知道.关键是要扩展每个列表并确保术语的顺序.思考?