初始化和渲染视图及其子视图有三种不同的方法,每种方法都有不同的问题。 我很想知道是否有更好的解决所有问题的方法: 情景一: 初始化父项初始化函数中的子项。 这样,并不是所有东西都被卡在渲染中,所以在渲染时阻塞较less。 initialize : function () { //parent init stuff this.child = new Child(); }, render : function () { this.$el.html(this.template()); this.child.render().appendTo(this.$('.container-placeholder'); } 问题: 最大的问题是,再次调用父对象的渲染将删除所有的孩子事件绑定。 (这是因为jQuery的$.html()是如何工作的。)这可以通过调用this.child.delegateEvents().render().appendTo(this.$el);来缓解this.child.delegateEvents().render().appendTo(this.$el); 相反,但是第一个,也是最常见的情况是,你不必要地做更多的工作。 通过追加孩子,你可以强制渲染function掌握父母DOM结构的知识,以便得到你想要的顺序。 这意味着更改模板可能需要更新视图的渲染function。 情景二: 初始化父对象的initialize()中的子对象,但是不要追加,而是使用setElement().delegateEvents()将子对象设置为父对象模板中的一个元素。 initialize : function () { //parent init stuff this.child = new Child(); }, render : function () { this.$el.html(this.template()); this.child.setElement(this.$('.placeholder-element')).delegateEvents().render(); } […]
我只知道一个js库,那就是jQuery 。 但是我的其他编程人员正在将AngularJS作为新项目的默认库。 我对此一无所知。 与jQuery有什么不同呢? 我已经有一组function在jQuery中完成类似的任务。 我仍然可以使用AngularJS的jQuery的东西吗?
我是新来的使用npm和鲍尔,build立我的第一个应用程序在emberjs :)。 我有一些使用rails的经验,所以我很熟悉列出依赖关系的文件(比如bundler Gemfile) 问题:当我想添加一个包(并检查依赖到git中),它属于哪里 – 进入package.json或进入bower.json ? 从我收集的信息来看, 运行bower install会取出包并放在/vendor目录下, 运行npm install它将获取它并把它放到/node_modules目录中。 这回答说,鲍尔是前端和npm是后端的东西。 Ember-app-kit似乎从第一眼就坚持了这个区别…但是gruntfile中为了启用某些function而给出的指令给出了两个明确的命令,所以我在这里完全搞糊涂了。 直觉上我会猜测 npm install –save-dev package-name将等同于将package-name添加到我的package.json中 bower install –save package-name可能与将包添加到我的bower.json并运行bower install相同 ? 如果是这样的话,我应该什么时候显式安装软件包,而不是将它们添加到pipe理依赖项的文件中(除了全局安装命令行工具)?
我试图寻找类似的问题,但一直没能find我的代码工作在jfiddle而不是在浏览器中的原因。 我也尝试了从jfiddle到另一个小提琴项目的代码副本,并在新项目中的代码不起作用。 你可以在这里find我的项目 。 我正在做一个互动的食品游戏,有人挑选一个食品,例如橡子壁球,然后用户可以拖动图像。 我的第一个尝试是在代码中粘贴代码。 <script language="JavaScript"> code </script> 我是否需要onpage载入事件? JavaScript是否需要放在一个函数? 我是否使用jfiddle框架中没有在我需要调用的本地主机上使用的东西? 下面是我没有额外的食物选项使用的代码 var stage, layer; var sources = { plate: 'http://www.healncure.com/wp-content/uploads/2014/03/plate1.jpg', acornsquash: '../../../wp-content/uploads/2014/03/acorn-squash.png', }; loadImages(sources, initStage); function loadImages(sources, callback) { var images = {}; var loadedImages = 0; var numImages = 0; // get num of sources for (var src in sources) { […]
我有一个JavaScript函数返回一个散列。 我需要通过这个散列到PHP来做它的东西。 最好的办法是做什么?
我有一个recursion的SetTimeout函数,它可以在筛选器加载后(在Ajax中加载,因此在页面加载时不能立即提供)点击我的页面上的筛选器。 $scope.clickFilter = function () { var filter = $('.filter-item') .find('input[value="' + $scope.activeFilter + '"]'); if (filter.length < 1) { setTimeout($scope.clickFilter(), 1000); } else { $(filter).trigger("click"); } } 但是,当filter需要很长时间才能加载时,出现“Uncaught RangeError:Maximum call stack size exceeded(…)” 我如何防止这种情况并确保它一直运行到完成?
我刚接触纯JavaScript的语法, 你知道为什么“getElementsByTagName”不能在我的简单testing中工作: var btn = document.getElementsByTagName('button'); console.log(btn); btn.onclick=function(){ alert('entered'); document.getElementById("demo").innerHTML="test"; } 小提琴
我在示例代码之一中想到了这一点,我完全迷失了。 const addCounter = (list) => { return […list, 0]; // This is the bit i am lost i now about […list, 0] } 显然上面是等于下面的。 const addCounter = (list) => { return list.concat([0]); } 任何build议或解释非常感谢。
在我的Chrome扩展中,我将内容脚本注入到页面内的所有IFRAMEs 。 这是manifest.json文件的一部分: "content_scripts": [ { "run_at": "document_end", "all_frames" : true, "match_about_blank": true, "matches": ["http://*/*", "https://*/*"], "js": ["content.js"] } ], 因此,一个具有多个IFRAMEs网页将最终运行我注入content.js许多副本。 content.js的逻辑从其注入的每个IFRAME收集数据,或从主/首页收集数据,并将其发送回后台脚本 (使用chrome.runtime.sendMessage )。 后台脚本又需要存储数据在全局variables中,稍后在扩展中使用。 我面临的问题是,应用程序需要区分从多个IFRAMEs接收到的“数据”,因为我的数据收集方法可以在用户与页面交互时重复调用,因此我不能简单地“转储”收到的数据由后台脚本变成一个数组。 相反,我需要使用dictionary典型的数据存储。 我可以通过运行以下命令来判断数据是来自IFRAME还是来自顶部页面: //From the `content.js` var isIframe = window != window.top; 我的想法是,如果我收集每个IFRAME页面URL,那么我应该可以把它作为一个唯一的键来存储在我的字典型全局variables下的数据: //Again from content.js var strUniqueIFrameURL = document.URL; 那么,这是行不通的,因为两个或更多的IFRAMEs可以有相同的URL。 所以,我的原始问题 – 如何分辨页面上的IFRAMEs ? Chrome是否分配给他们一些独特的ID或某些信息?
我正在努力刮几个网站。 这是我的代码: for (var i = 0; i < urls.length; i++) { url = urls[i]; console.log("Start scraping: " + url); page.open(url, function () { waitFor(function() { return page.evaluate(function() { return document.getElementById("progressWrapper").childNodes.length == 1; }); }, function() { var price = page.evaluate(function() { // do something return price; }); console.log(price); result = url + " ; […]