下面的代码显示了一个标准的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'
。