相关疑难解决方法(0)

Javascript - 内联vs外部脚本 - 有什么区别?

我的页面上散布了一些javascript片段 - 很多都包含在我自己的.js文件中,但是我在网上找到的一些东西直接放在页面上.

我不太熟悉javascript与页面的交互方式 - 添加内联脚本或添加对外部文件的引用是否有区别?

javascript

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

有人可以用真正简单的语言向我解释什么是封闭?

可能重复:
.NET中的"闭包"是什么?

我目前正在研究lambda表达式,并且封闭一词不断涌现.有人可以用真正简单的语言向我解释.

c# lambda closures

11
推荐指数
5
解决办法
2575
查看次数

创建一个jQuery插件:关于函数可见性的最佳实践?

我正在创建一个jQuery插件.到目前为止它工作正常,但我对我做事的方式有疑问:

jQuery.fn.myMethod = function() {
  return this.each(function(){
    MyScope.doSomething(jQuery(this).attr("id"));
  });
};

var MyScope = {

  // The functions contained in MyScope are extremely linked to the logic 
  // of this plugin and it wouldn't make a lot of sense to extract them

  doSomething: function(id){
    // something
    doSomethingElse(23);
    // some more code
    doSomethingElse(55);
  },

  doSomethingElse: function(someInt){
    // some code 
  }
};
Run Code Online (Sandbox Code Playgroud)

我使用MyScope存储我的所有"私人"功能.我不希望用户能够去$("p").doSomething(),但我确实需要使用它们.

我可以移动myMethod函数中的所有内容,但它会创建一个100行长的函数,人们会讨厌它.

在这种情况下,最佳做法是什么?关于这个,有没有很棒的教程?

javascript jquery jquery-plugins

11
推荐指数
2
解决办法
3981
查看次数

(Angularjs)如何$ http.get数据并将其存储在服务中

正如你将看到我是AngularJS,JS和web开发中的新手=)真的很抱歉,但我试着.

我尝试用AngularJS控制器构建一个庞大的webform(大约200个不同的字段).我需要从控制器访问根数据源.AngularJS团队要求不要仅仅为了存储数据而提供服务,但我想为加载和保存数据提供服务(在服务器上启动.json文件).

服务:

AppName.factory('MasterData', ['$rootScope', '$http', '$q', '$log', 
    function($rootScope, $http, $q, $log) {

    var responseData;
    $http.get('/getdata.php').then(function (response) {
        responseData = response.data;
        console.log(response.data);
    });

    return responseData;

}]);
Run Code Online (Sandbox Code Playgroud)

控制器:

AppName.controller('justController', ['$scope', 'MasterData', '$log',
    function ($scope, MasterData, $log) {
        $scope.data = MasterData.justControllerSectionData;
        console.log(MasterData);
    }
]);
Run Code Online (Sandbox Code Playgroud)

控制器返回undefined.但是来自服务的console.log返回对象.我觉得问题太容易了,但是我找不到如何解决它:(我也不能使用像.getData()这样的函数从控制器到服务,因为每次控制器加载时它都会从服务器询问数据.我在AngularJS应用程序中有12-14个控制器的路由(完整的webform除以部分),我认为从后端获取数据一次是好的.

PS我觉得承诺有问题,但是当我尝试使用这样的代码时:

var defer = $q.defer();
$http.get('/getdata.php').success(function(data){
    defer.resolve(data);
});
return defer;
Run Code Online (Sandbox Code Playgroud)

我有决心,拒绝等对象.真的无法理解我能用它做什么:(

帮我在控制器中获取数据:)

javascript json angularjs

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

闭包:用Javascript或者翻译语言中的PHP"use"关键字或C++捕获列表的等价物

在PHP中,我们有一个简洁的use关键字,允许在使用闭包时使用"外部"变量,如下所示:

$tax = 10;
$totalPrice = function ($quantity, $price) use ($tax){  //mandatory 'use'
    return ($price * $quantity) * ($tax + 1.0);
};
Run Code Online (Sandbox Code Playgroud)

如果我们省略该use ($tax)部分,它将抛出一个错误,我非常喜欢.

类似地,在C++ 11中,我们也这样做,使用括号指定称为捕获列表的外部变量:

float tax = 10;
auto totalPrice = [tax](int quantity, float price){   //mandatory []
   return (price*quantity) * (tax + 1.0);
};
Run Code Online (Sandbox Code Playgroud)

与在php中一样,如果省略捕获列表,则会抛出错误.

在Javascript中,我们没有等效于此use关键字(或c ++ []),我们只是这样做:

var tax = 10;
var totalPrice = function (quantity, price){  //no need for 'use' or similar
    return (price * quantity) * (tax …
Run Code Online (Sandbox Code Playgroud)

javascript php closures c++11 typescript

11
推荐指数
1
解决办法
1105
查看次数

如何将参数传递给jQuery document.ready()函数(ASP.NET MVC,C#)

我想从我的视图中将参数传递给jQuery document.ready()函数:

$(document).ready(function (parameter){
        $('select[name=Product]').val(parameter);
});
Run Code Online (Sandbox Code Playgroud)

如何从我的View中触发事件并传递参数?我使用Razor作为View引擎.

谢谢

c# jquery razor asp.net-mvc-3

10
推荐指数
3
解决办法
4万
查看次数

使用'new'创建对象时使用'return'

我今天发现了一些非常奇怪的事情:如果使用构造函数和new关键字创建对象,但是return构造函数中的函数,它的行为如下:

  1. 新创建的"对象"是一个函数.
  2. 可以像平常一样调用新函数,但是......
  3. 如果this在构造函数中维护引用,则this引用从构造函数正确创建的对象.这是你期望从中返回的new.

这是一个例子:

function Constructor() {
  var self = this;

  this.name = 'instance';
  return function() {
    return self;
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您像这样实例化:var instance = new Constructor() 将产生以下结果:

typeof instance    //returns "function"
typeof instance()  //returns "object"
instance()         //returns { name: 'instance' }
Run Code Online (Sandbox Code Playgroud)

所以我猜我有三个问题:

  1. 这是合法的,它是否跨浏览器工作?它真的很棒,我认为它可以在很多方面使用,但这种行为是否可靠?
  2. 导致此行为的后台会发生什么?
  3. (可能由2回答,但是......)新实例中是否有新对象(以'this'引用的对象),所以它都是自包含的并且被垃圾收集器正确清理了?

javascript node.js

10
推荐指数
1
解决办法
231
查看次数

命名空间vs自调用函数

我有一个问题:在Javascript中限制范围的更好方法是:使用这样的命名空间:

var NAMESPACE = {};
NAMESPACE.foo = function() { 
   console.log('Hello');
}
NAMESPACE.foo();
Run Code Online (Sandbox Code Playgroud)

或者我应该使用这样的自我调用功能

(function() {
    function foo() { console.log('Hello'); }
    foo();
})();
Run Code Online (Sandbox Code Playgroud)

拥有一个命名空间总是好的,或者如果我只使用一个很大的自我调用函数来放置我所有的东西,我可以省略它吗?

javascript

10
推荐指数
2
解决办法
1743
查看次数

承诺关闭?

闭包标签维基页面中,它显示"jQuery本身就是一个大关闭".

但是也承诺关闭?你能解释一下为什么或为什么不解释?这就是我理解闭包的方法:为变量分配一个函数并在不同的环境中重用它.Promise可以做到这一点$.ajax(),但我无法在stackoverflow中找到将promise作为闭包引入的任何地方.也许是因为有像承诺的其他功能$.Deferred(),resolve()以及fail()扩展其功能,而不仅仅是一个简单的函数传递?

javascript closures promise

10
推荐指数
3
解决办法
5440
查看次数

运行concat/uglify后出现角度"状态已定义"错误

我正在开发一个AngularJS应用程序.要在生产中发布代码,我正在使用这个Grunt配置/任务:

  grunt.registerTask( 'compile', [
    'sass:compile', 'copy:compile_assets', 'ngAnnotate', 'concat:compile_js', 'uglify', 'index:compile'
  ]);
Run Code Online (Sandbox Code Playgroud)

调试真的很难,对于那些已经遇到过这些问题并且可以指向某个方向的人来说,这是一个问题.

我的主要模块包括那些子模块:

angular
  .module('controlcenter', [
    'ui.router',
    'ui.bootstrap',
    'templates-app',
    'templates-common',
    'authentication',
    'api',
    'reports',
    'interceptors',
    'controlcenter.websites',
    'controlcenter.users',
    'controlcenter.campaigns',
    'controlcenter.reports',
    'controlcenter.login'
  ])
  .run(run);
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

Uncaught Error: [$injector:modulerr] Failed to instantiate module controlcenter due to:
Error: [$injector:modulerr] Failed to instantiate module controlcenter.websites due to:
Error: State 'websites'' is already defined
Run Code Online (Sandbox Code Playgroud)

如果我删除网站模块,我得到controlcenter.users相同的错误.

我正在使用它ui-router来处理应用程序内部的路由.

在我的构建过程(用于集成测试)之后,一切正常:

  grunt.registerTask( 'build', [
    'clean', 'html2js', 'jshint', 'sass:build',
    'concat:build_css', 'copy:build_app_assets', 'copy:build_vendor_assets',
    'copy:build_appjs', 'copy:build_vendorjs', 'copy:build_vendorcss', 'index:build', 'karmaconfig',
    'karma:continuous'
  ]);
Run Code Online (Sandbox Code Playgroud)

那么也许 …

angularjs

10
推荐指数
1
解决办法
9575
查看次数