下面的代码显示了一个标准的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中实现这种模式的正确方法是什么?
我已经尝试将代码放在它自己的操作中,如下所示,但这会返回undefined:
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.
},
}
我希望能够从我的应用程序的各个不同部分运行此代码。在我的应用程序中使这样的函数可用的最佳方法是什么,以便它可以将结果返回到它从中调用的函数?
答案 0 :(得分:0)
处理这个问题的正确方法是创建一个实用程序函数,运行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'
。