Ember.js-定义一个全局函数,该函数可以向操作返回值
Ember.js- define a global function that can return a value to actions
下面的代码显示了一个标准的JavaScript模式,用于定义一个占用大量字节并将其转换为可读格式的函数。
在标准JavaScript中,您可以将函数作为变量调用,因此变量值就是函数返回的值。
//Define function
function bytesToReadable(numberOfBytes) {
var readableSize;
var units;
if (numberOfBytes <= 1000) {
readableSize = numberOfBytes;
units = ' bytes';
} else if (numberOfBytes > 1000 && numberOfBytes <= 1000000) {
readableSize = Math.ceil(numberOfBytes / 1000);
units = ' KB';
} else if (numberOfBytes > 1000000 && numberOfBytes <= 1000000000) {
readableSize = (numberOfBytes / 1000000).toFixed(2);
units = ' MB';
} else if (numberOfBytes > 1000000000 && numberOfBytes <= 1000000000000) {
readableSize = Math.ceil(numberOfBytes / 1000000000);
units = ' GB';
}
var prettySize = readableSize + units;
return prettySize;
}
//Call function
var test = bytesToReadable(2360000);
console.log(test);//Logs '2.36MB'
在Ember中实现这种模式的正确方法是什么?
我试着把代码放在它自己的操作中,如下所示,但这返回了未定义的:
actions: {
bytesToReadable: function(numberOfBytes) {
var readableSize;
var units;
if (numberOfBytes <= 1000) {
readableSize = numberOfBytes;
units = ' bytes';
} else if (numberOfBytes > 1000 && numberOfBytes <= 1000000) {
readableSize = Math.ceil(numberOfBytes / 1000);
units = ' KB';
} else if (numberOfBytes > 1000000 && numberOfBytes <= 1000000000) {
readableSize = (numberOfBytes / 1000000).toFixed(2);
units = ' MB';
} else if (numberOfBytes > 1000000000 && numberOfBytes <= 1000000000000) {
readableSize = Math.ceil(numberOfBytes / 1000000000);
units = ' GB';
}
var prettySize = readableSize + units;
return prettySize;
},
anotherAction: function() {
var test = this.send('bytesToReadable', 2360000);
console.log(test) //Logs undefined.
},
}
我也尝试过使用属性:
bytesToReadable: function(numberOfBytes) {
var readableSize;
var units;
if (numberOfBytes <= 1000) {
readableSize = numberOfBytes;
units = ' bytes';
} else if (numberOfBytes > 1000 && numberOfBytes <= 1000000) {
readableSize = Math.ceil(numberOfBytes / 1000);
units = ' KB';
} else if (numberOfBytes > 1000000 && numberOfBytes <= 1000000000) {
readableSize = (numberOfBytes / 1000000).toFixed(2);
units = ' MB';
} else if (numberOfBytes > 1000000000 && numberOfBytes <= 1000000000000) {
readableSize = Math.ceil(numberOfBytes / 1000000000);
units = ' GB';
}
var prettySize = readableSize + units;
return prettySize;
},
actions: {
anotherAction: function() {
var test = this.get('bytesToReadable', 2360000);
console.log(test);//Logs the function itself.
},
}
我希望能够从应用程序的各个不同部分运行此代码。在我的应用程序中提供这样一个函数的最佳方法是什么,这样它就可以将结果返回到调用它的函数?
处理此问题的正确方法是创建一个实用程序函数,运行ember g util bytesToReadable
将生成样板文件,剩下的就是将代码移动到文件:
export default function bytesToReadable(numberOfBytes) {
let readableSize;
let units;
if (numberOfBytes <= 1000) {
readableSize = numberOfBytes;
units = ' bytes';
} else if (numberOfBytes > 1000 && numberOfBytes <= 1000000) {
readableSize = Math.ceil(numberOfBytes / 1000);
units = ' KB';
} else if (numberOfBytes > 1000000 && numberOfBytes <= 1000000000) {
readableSize = (numberOfBytes / 1000000).toFixed(2);
units = ' MB';
} else if (numberOfBytes > 1000000000 && numberOfBytes <= 1000000000000) {
readableSize = Math.ceil(numberOfBytes / 1000000000);
units = ' GB';
}
let prettySize = readableSize + units;
return prettySize;
}
当你想在应用程序中使用它时,你会选择import bytesToReadable from 'yourAppName/utils/bytes-to-readable'
。
相关文章:
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- document.title函数可以't设置它与php一起工作
- 如何创建可以向下滚动的导航
- .hasClass 在 onclick 函数中不起作用,但删除和添加类函数可以
- 在进行服务器端渲染时,我可以向客户端发送React组件吗
- 对Javascript感到困惑.布尔函数可以充当void函数
- jQuery/Javascript函数可以在Chrome中使用,但不能在IE11中使用
- 有人可以向我解释一下代码的JavaScript / Ajax部分是做什么的
- 是否有任何函数可以帮助转义 jQuery 选择器中包含的所有元字符?
- setInterval函数可以't读取数组
- Ember.js-定义一个全局函数,该函数可以向操作返回值
- 是否有一个Javascript函数可以使代码在运行时延迟
- 是否可以向用户发送javascript代码's浏览器安全
- 为什么在JavaScript中,被调用的函数可以以名称+冒号作为前缀
- 此JavaScript函数可以单独使用,但不能与其他JavaScript函数一起使用
- ajax 调用返回时可以向页面添加新的 javascript 函数吗?
- 是否可以向 JavaScript 函数添加属性
- 有人可以向我解释 && 在调用函数时做什么吗?
- 我可以向Worklight适配器onSuccess函数传递两个参数吗?
- 是否可以在CouchDB验证函数中向文档添加字段?